A group

Going forward.
In this space.
TLA (three letter acronyms).

I hate business speak…

@Andrew_Stacey - spot on. Here’s a demo of some of the transitions so you can judge for yourself.


@West How vile!

Is it not possible to just have the new slide appear with no fuss whatsoever? What if I want to build an equation step by step? Do I really have to have flying numbers? Can’t they just appear in place with no fancy effects?

Urgh. I really do think I’ll stick to chalk. Much, much cleaner.

@Andrew_Stacey - yes you can have plain slides with no fancy effects. This stuff was just added to later versions of powerpoint

Hello again, sorry for disturbing your interesting discussion here (Powerpoint is really good, i used to make simple games with it) but i have a question here again. How do you use setContext() ? And i am just wondering, how old is everybody here? When i look at the commentarys here i imagine that all of you are smart people around 12-17 years! Just curious.

setContext() is used to control where you are drawing your images. The default is screen using setContext() but you could also draw directly into an existing image using setContext(img) where img is your image you with to draw to.

I’m a lot, lot older than that :slight_smile:

Powerpoint is really good, i used to make simple games with it

Huh? No-one mentioned games. I was just coming round to the idea of it being for presentations. Now my students can play games with it?

I don’t think so!

Whether or not I’m “smart”, I’ll leave to others. As for age then I think I’m displaying dinosaurish tendencies in this discussion.

@Andrew_Stacey, If I may chime in… I’ve used PowerPoint for years (in fact, I frequently use it to brief high-ranking officers). Here’s the advantages from my perspective:

  1. It keeps you on track. For instance, “today we will cover x, y, and z.” This way, you can compress the most information in the shortest amount of time (generals are always short on time). I don’t put a lot of verbiage on my slides. I’ve found that if my audience is busy reading my slide, they aren’t listening to me. Most of my bullets are designed to jog MY memory and keep ME on track.

  2. Graphics enliven your presentation. There’s nothing like good graphics to help sell your point and add interest. For instance, “This route is dangerous and this is what it will look like…” I will then show an overhead picture of the route. “Here’s a fly-through from street level.” I’ll accompany my message with graphics representing 3D buildings and I’ll point out critical areas. “The biggest threat is Hajji Badguy.” And I’ll show a picture of Hajji Badguy. This is where PowerPoint shines. For math instruction, you may not find this capability useful unless you’re trying to describe some complex, bizarre-o-hedrin-type shape. Then again, you might find it useful for helping students visualize difficult concepts–such as fluid dynamics.

  3. It allows you to provide ‘extra’ information. I’ve noticed that busy, high-ranking folks want to know why you are showing them slides. In fact, EACH slide needs to answer the question, ‘So what?’ I try to provide a lot of visual content within each of my slides. For instance, I gave a briefing on a Dam project. While I discussed the details of the existing dam, I showed a picture of a canal filled with garbage. My additional message was, “Oh by the way, don’t expect the locals to take care of it when it’s finished.”

I know this is sort of off-topic and I apologize for the verbosity. But this is one of the few times I could actually contribute from a knowledgeable position. I hope it helps.

Ah, @Ric_Esrey now you make me feel bad for trolling!

I was going to let this run to see just how long I could push it before someone said “Hang on!”. I even gave you the clue of beamer (do a google search for “Andrew Stacey beamer”).

My serious point (do I have one?) was that “Presentation =/= Powerpoint”. A Powerpoint presentation is a presentation using a particular piece of software in its preparation and presentation. But there are many other presentation softwares, and many vastly superior to Powerpoint.

We have a saying on the TeX Stackexchange site:

“If you have something to say, use beamer. If not (and you want to disguise that fact), use powerpoint.”

(beamer is the name of a LaTeX class for preparing PDF presentations. It’s very, very good.)

Wow @Andrew_Stacey, now I feel like the dinosaur. ;)) I’ll have to research Beamer to see if it will help me improve my presentations. I’m sure the problem will be that this cool tool is not yet authorized for use on our networks–military tech is always ten years behind the times. I should have known, however, that you were only feigning ignorance. Re-reading your posts, I now see the point you were making–didn’t catch it at the time.

@MMGames - I am writing a small display list heavily inspired from the Flash one, perhap’s it can help you. Usage is simple (I hope :). With this you can “group” and “nest” objects. It include an event system for the touch events. This is a work in progress so it’s not yet achieved.
The principle is that a nested object inherits the translation of its parent. I put an exemple with the lib.

the lib :

Notifier = class()
-- Very basic dispatcher

function Notifier:init ()
    self._listens = {}

-- Dispatch a note. The note will be dispatched to the
-- notified method of the registered listeners
-- @param name the note name
-- @param msg any value passed in the note body
-- @return true if the note was dispatched
function Notifier:trigger ( name, msg )
    local a = self._listens[name]
    if not a then return nil end
    local note = {name=name, body=msg}
    for i,o in ipairs(a) do
        if o:notified(note) == false then
            return false
    return true

-- Add a listener
-- @param name the note name to listen to
-- @param scope object instance to dipatch to
function Notifier:listen ( name, scope )
    if not self._listens[name] then self._listens[name] = {} end

-- Remove listener
function Notifier:unlisten ( name, scope )
    local a = self._listens[name]
    for i,o in ipairs(a) do
        if o == scope then

-- DisplayObject

DisplayObject = class(Notifier)

function DisplayObject:init (x,y,width,height,name)
    -- The first DisplayObject created will be the display list root

    if not DisplayObject.root then
        DisplayObject.root = self
    self.root = DisplayObject.root
    self.x = x or 0
    self.y = y or 0
    self.width = width or 0
    self.height = height or 0
    self.name = name or "instance" .. ElapsedTime
    self.children = {}

function DisplayObject:append (child, index)
    -- Append a child DisplayObject to this container at index index.
    -- If no index given, child is append at the last valid index
    -- The child is automaticaly removed from its parent if this one is not
    -- this container

    local children = self.children ind = self:getIndex(child)
    if not ind then
        if child.parent then child:remove() end
        child.parent = self
    elseif ind < #children then
    local lastindex = #children + 1
    if not index or index > lastindex then index = lastindex end

function DisplayObject:remove (child)
    -- Remove a child from this or this from it's parent if no child given
    if not child then
        local ind = self:getIndex(child)
        if ind then
            child.parent = nil

function DisplayObject:getIndex (child)
    -- Return the index of a child or the index of this from to its parent
    -- if no child given
    for i,c in ipairs(self.children) do
        if c == child then return i end

--    TODO
function DisplayObject:swapIndex (childOrIndex)
    -- Change this index to childOrIndex if numerical or swap this
    -- index with another DisplayObject witch belong to the same parent
    if type(childOrIndex) == "number" then

function DisplayObject:toGlobal (v)
    -- Return vector scaled from local position to global position
    -- TODO

function DisplayObject:toLocal (v)
    -- Return vector scaled from local position to global position

    if self.parent then
        v = self.parent:toLocal(v) - vec2(self.x,self.y)
    return v

function DisplayObject:inBounds (v)
    -- Test if a vec2 is inside bounds of this instance

    local v = self:toLocal(v)
    return  v.x >= 0 and v.x <= self.width and v.y >= 0 and v.y <= self.height

function DisplayObject:draw ()
    -- Recursive draw chidren
    -- * All DisplayObject inherited sub classes must implements
    -- the draw method
        -- print(self.name)
    for i,c in ipairs(self.children) do

-- Temp tests
function DisplayObject:listen ( name, scope, capture )
    Notifier.listen(self, name, scope)
    self.useCapture = capture

function DisplayObject:inTouch (touch)
    -- Method called on all the DisplayObject during the touched call
    -- Override this to perform more accurate tests

    return self:inBounds(vec2(touch.x,touch.y))

function DisplayObject:touched (touch)
    -- Execute the touch test method on the entire children tree.
    -- Dispatch touch event for the capture and bubbling phases
    -- Call the touched methods of the children
    -- This method should be called only on the root DislayObject

    local touched = {}
    local function wt (self,touch)
        local intouch
        for i,c in ipairs(self.children) do
            if wt(c,touch) then
                intouch = true
        if not intouch then
            intouch = self:inTouch(touch)
        self.isTouched = intouch
        return intouch

    -- Get touched children
    -- Capture phase
    for i,c in ipairs(touched) do
        if c.useCapture then
            if c:trigger("touch") == false then return false end

    -- Bubbling phase
    local c
    for i=#touched,1,-1 do
        c = touched[i]
        if c:trigger("touch") == false or c:touched(touch) == false then return false end

Usage ex:

-- Rect

Rect = class(DisplayObject)
function Rect:draw()

-- Main

function setup()
	-- First DisplayObject will be the "root" of all
	stage = DisplayObject(0,0,WIDTH,HEIGHT,"stage")
	-- Create an empty container at pos 10,10
	local group = DisplayObject(10,10)
	-- Append 2 Rect that inherits from DisplayObject
	local rect = Rect(10,10,100,100)
	-- Append Rect in a Rect, and so on...
	-- Append the group to the root

function draw()
	-- Here you can act on the group
	group.x = group.x + 1 % WIDTH
	-- We just have to call the draw method of the root
	-- children's draw method will be recursively called

function touched(touch)
	-- Same rules apply as draw

@Ric_Esrey: Given that beamer is based on TeX, it might be classified.

My argument against PowerPoint is maybe slightly, highly biased :wink:

@Andrew_Stacey Its not just powerpoint that can be used for games! Some of the older office apps had games built in as Easter eggs, pinball in word 97 and a sort of shooty car game in excel 2000 they were awesome time killers :smiley:

Agreed @Ignatz business speak is just unnecessary and convolutes strait forward things. That and people with their boxes of unspecified technology of unimaginable power :slight_smile:

@MMGames - there is a real mix of ages here, but I suspect nearly all male.

To use setContext - suppose you want to create your own image img with stuff on it. It’s really easy

img=image(100,100) --create blank image the size you want
setContext(img) --start drawing on img
    -- any drawing you do in here will happen on img, not the screen
    --give it a background if you want, eg background(255,0,0)
    -- all x,y positions are relative to img, so 10,30 draws at x=10,y=30 of img
    -- eg sprite(some_image, 10,30)
setContext() --stop drawing on img, back to normal, now you can sprite img on screen

@toffer take a look at (and feel free to use) AppEvents for the events part of your display list :slight_smile:


Powerpoint like a lot of microsoft apps is good at basic stuff, but then they added unecessary cruft to it to justify version upgrades. (That being said 2013 has nicked a bunch of stuff from onenote in terms of projector is the show, and your laptop has current slide, next slide and a timer which is nice to have)…

Anyways, their tools are common and relatively easy for new users which is good. The problem is a tool that everyone can use without training means it gets used by a lot of clueless people with no judgement. So if you use it to build background information and a couple of images to highlight or inform, with simple appear transitions, then fine.

But then “those” people get hold of it and before you know it every word comes in on a random animation, and there’s a 3d pie chart of sales and I want to kill myself.

lol! @Andrew_Stacey i was quite surprised about you really totally ignoring what powerpoint is. It is a relief to see you live on the same planet as the rest of us. :wink:

What I hated about Powerpoint was when you’re in a boring presentation, and then you see in the corner of the slide, “Slide 8 of 79”. THEN you want to kill yourself!

Lol, my rule of thumb is 1 slide per 5 minutes of meeting AT THE MOST. Generally a lot less.

@Ignatz One thing I’ve seen in some mathematical beamer presentations is that after the statement of a theorem there’s a “skip proof” link which allows the presenter to skip over the proof if they’re running out of time.

The sense of relief one feels when the presenter actually does this led us to coming up with the idea of putting one of those in even if you never intended showing the proof at all.