Abschließend will ich ein Beispiel für die dynamische Vererbung, also den Wechsel des ancestors im laufenden Programm, darstellen. Das Objekt KollisionsObjekt bewegt ein Objekt über die Bühne. Wenn das Objekt den Rand der Bühne berührt, prallt es daran ab.
-- dieses Objekt bewegt sich über die Bühne; wenn 
  es
  -- an eine Kante stößt, prallt es von ihr ab
  -- die grafische Darstellung wird vom ancestor übernommen;
  -- er muss folgende Methoden implementieren:
  --
  -- draw()
  -- zeichnet die Grafik mit Hilfe Sprite Spritenummer an
  -- die Position (x|y)
  -- getWidth()
  -- getHeight()
  -- liefert Breite und Höhe der Grafik; es wird davon ausgegangen,
  -- dass der Registrierungspunkt in der Mitte der Grafik liegt 
  
  
  property ancestor, mBewegungsvektor, mX, mY
  
  on new me, vektor, x, y
  -- der aktuell Bewegungsvektor (dx|dy)
  mBewegungsvektor= vektor
  -- die Position des Objekts
  mX = x
  mY = y
  return me
  end new
  
  on getX me
  -- gibt die horizontale Position zurück
  return mX
  end getX
  
  on getY me
  -- gibt die vertikale Position zurück
  return mY
  end getY
  
  on setAncestor me, objekt
  -- setzt den ancestor
  ancestor = objekt
  end setAncestor
  
  on bewegen me
  -- bewegt das Objekt ein Stück weiter
  mX = mX + mBewegungsvektor.locH
  mY = mY + mBewegungsvektor.locV
  -- minimal und maximal zulässige x- und y-Werte ausrechnen
  xMin = me.getWidth()/2
  yMin = me.getHeight()/2
  xMax = (the stage).rect.width - me.getWidth()/2
  yMax = (the stage).rect.height - me.getHeight()/2
  -- prüfen, ob Objekt zu weit links ist
  if mX < xMin then
  -- Objekt links abprallen lassen
  mX = xMin + xMin - mX
  -- Bewegunsrichtung umkehren
  mBewegungsvektor = mBewegungsvektor * point(-1, 1)
  else
  -- prüfen, ob Objekt zu weit rechts ist
  if mX > xMax then
  -- Objekt rechts abprallen lassen
  mX = xMax + xMax - mX
  -- Bewegunsrichtung umkehren
  mBewegungsvektor = mBewegungsvektor * point(-1, 1)
  end if
  end if
  -- prüfen, ob Objekt zu weit oben ist
  if mY < yMin then
  -- Objekt oben abprallen lassen
  mY = yMin + yMin - mY
  -- Bewegunsrichtung umkehren
  mBewegungsvektor = mBewegungsvektor * point(1, -1)
  else
  -- prüfen, ob Objekt zu weit unten ist
  if mY > yMax then
  -- Objekt unten abprallen lassen
  mY = yMax + yMax - mY
  -- Bewegunsrichtung umkehren
  mBewegungsvektor = mBewegungsvektor * point(1, -1)
  end if
  end if
  end bewege
In jedem Frame werden die Methoden bewegen() und draw() des Objektes ausgeführt.
global gBewegungsObjekt
  
  on exitFrame
  -- Objekt bewegen
  gBewegungsObjekt.bewegen()
  -- Objekt zeichnen
  gBewegungsObjekt.draw()
  
  go to the frame
  end exitFrame
Dabei muss die Methode draw() vom ancestor definiert werden, ebenso wie die Methoden getHeight() und getWidth(), die das KolissionsObjekt benötigt, um zu bestimmen, wann das bewegte Objekt den Bühnenrand berührt. Die einfachste Implementierung ist die des KreisObjekts, das einfach eine Grafik über den Bildschirm schiebt.
-- einfaches Objekt, das einen Kreis zeichnet und sich dabei
  -- der Koordinaten eines Unterobjektes bedient (mit getX, getY)
  
  property mSprite, mGrafikMember
  
  on new me, s
  -- in welchem Sprite liegt die Grafik?
  mSprite = sprite(s)
  -- welche Grafik wird angezeigt?
  mGrafikMember = member("Kreis")
  return me
  end new
  
  on draw me
  mSprite.member = mGrafikMember
  mSprite.loc = point(me.getX(), me.getY())
  mSprite.width = mGrafikMember.width
  mSprite.height = mGrafikMember.height
  mSprite.rotation = 0
  end draw
  
  on getWidth me
  -- Breite der Grafik
  return mGrafikMember.width
  end getWidth
  
  on getHeight me
  -- Höhe der Grafik
  return mGrafikMember.height
  end getHeight
Über die Buttons am unteren Rand des Bildschirms lässt sich der ancestor des Kollisionsobjekt im laufenden Programm zu einem pulsierenden Rechteck (PulsObjekt) oder einer sich drehenden Scheibe(RotationObjekt) wechseln. In diesen Objekten werden lediglich die drei Methoden draw(), getWidth() und getHeight() anders definiert. Das KollisionsObjekt bleibt dasselbe.
|  | |||
|   | 4.13 Beispiel 5: Blick durch ein Mikroskop | 4.15 Synchronisation mit dem Drehbuch durch on stepframe und the actorlist |  |