Squeak Alice

From OFSET Wiki

(Redirected from Alice)
Jump to: navigation, search

Contents

[edit] Une version Squeak du projet Alice

Le projet Alice s'est donné comme objectif de permettre à des personnes qui ne connaissent rien à la programmation de construire des mondes en 3D. Squeak Alice est une implémentation par Jeff Pierce en Squeak du projet développé à l'origine par le groupe de recherche Stage3 de l'université de Carnegie Mellon

[edit] Comment l'installer ?

  • Faire apparaître le menu monde, puis sélectionner ouvrir... -> chargeur de paquets SqueakMap.
  • Il faut d'abord installer le paquet Balloon avant Alice, donc :
    • Rechercher le paquet Balloon à l'aide de l'espace de recherche en haut à gauche de la fenêtre.
    • Sélectionner Balloon3D puis cliquer sur le petit carré en haut à droite de la liste des packages lorsqu'une icone de menu est visible sous la souris.
    • Sélectionner l'entrée install du menu flottant.

Image:Alice06.jpg

  • Utiliser cette procédure pour installer Alice (en fait FullImageProjectAlice)

[edit] Premiers pas

L'installation décrite ci-dessus amène un monde habité par le lapin musicien bunny.

Image:Alice07.jpg

Le carré en haut à gauche présente une vue de l'espace 3D (la scène) fournie par la seule caméra présente au lancement ; il peut en exister d'autres.

La fenêtre verte permet d'interagir en smalltalk avec le monde. Cette fenêtre est partagée en deux espaces:

  • à gauche sont représentés les objets et parties des objets présents dans l'espace 3D.
  • à droite, trois onglets permettent de sélectionner la fonction de cette zone :
    • script : permet d'entrer les expressions ou d'évaluer des expressions existantes ;
    • Actor Info : permet d'explorer les caractéristiques des différents objets 3D de la scène, il suffit de les sélectionner à la souris ;
    • Quick Reference un rapide vade mecum pour commencer à interagir avec les objets du monde d'Alice.

Cocher l'onglet script. Ce volet affiche un texte qui comporte de nombreuses expressions toutes faites.

Pour évaluer une expression, placer le curseur dans le texte ou la selectionner dans son entier, puis taper [alt]+[d]. Les essayer les unes après les autres.

[edit] Les bases d'Alice

Pour commencer à créer un nouveau projet, partir de l'onglet Outils amener un espace de travail ou un morph texte à partir de l'onglet accessoires. Entrer l'expression Wonderland new. puis l'évaluer en la sélectionnant puis en tapant [alt]+[d] pour créer un monde vide.

[edit] Objets 3D, panneaux, acteurs et cameras

[edit] Dessiner un objet

La scène vue est un morph, faire apparaître son halo.

  • Un bouton inhabituel est présent à droite sous la bulle Créer un objet Pooh.
  • Cliquer dessus transforme le pointeur de la souris en une croix. Maintenir le bouton droit de la souris permet de dessiner à main levée l'esquisse d'un objet sous la forme d'un parcours clos.
  • Relacher dès que la forme convient.
  • Un nouvel objet se forme à partir de ce contour.

L'outil de dessin s'utilise de la matière habituelle pour peindre et dessiner... sur la forme 3D. Celle-ci est orientée vers la gauche de la scène et se nomme sketch.

Evaluer l'expression sketch pointAt: camera. dans la fenêtre Script.

La baleine se tourne lentement vers la gauche pour "regarder" la camera.

Essayer aussi :

  • sketch move: forward.
  • sketch move: back.

Sur cette façon de faire qui couple Alice avec les Etoys, voir 3d fishbowl in Squeak du groupe de Diego Gomez.

[edit] Insérer un panneau

w makePlaneNamed: 'ecran'.

[edit] Insérer un acteur

ftp://st.cs.uiuc.edu/pub/Smalltalk/Squeak/alice/Objects.zip

[edit] Insérer une camera

w makeCamera.

[edit] Piloter à la souris

[edit] Les objets et les acteurs

Pour interagir directement avec les objets à l'aide de la souris :

  • Cliquer le bouton gauche et le laisser enfoncer permet d'entrainer l'objet horizontalement : latéralement en bougeant le curseur vers la droite ou la gauche et en profondeur bougeant le curseur vers le haut pour l'éloigner et vers le bas pour le rapprocher.
  • Appuyer sur [shift] (touche [maj]), cliquer et laisser le bouton gauche enfoncer pour entrainer l'objet vers le haut et la bas.
  • Appuyer sur [ctrl] et sur [shift] (touche [maj]), cliquer et laisser le bouton gauche enfoncer pour tourner l'objet en tous sens.

[edit] Les cameras

Une camera se manipule directement comme n'importe quel acteur si l'on voit la camera (ie si elle est filmée par une autre camera).

Ou indirectement, en faisant aparaître des flèches de pilotage attachés à la vue de la scène fournie par la camera.

cameraWindow showCameraControls.

  • Pointer et cliquer sur les flèches droite et gauche pour faire tourner la camera respectivement vers la droite et vers la gauche.
  • Pointer et cliquer sur les flèches avant et arrière pour faire avancer ou reculer la camera.
  • Simultanément appuyer sur la touche [shift], pointer et cliquer sur les flèches avant et arrière pour faire monter ou descendre la camera.

[edit] Manuel de référence

Ce manuel rapide est une traduction approximative du volet Quick Reference de l'interface de squeak Alice.

Noms communs à tous les mondes merveilleux d'Alice :

  • scene - la scène qui contient les acteurs
  • scheduler - une sequence programmée
  • camera - la caméra par défaut
  • cameraWindow - le morph qui présente la scène captée par la caméra
  • ground - le sol
  • w - le monde

[edit] Les acteurs

Cette section rassemble les commandes par catégories.

[edit] Les mouvements

[edit] Les mots clés usuels
  • sens du mouvement : left (à gauche), right (à droite), up (vers le haut), down (vers le bas), forward (vers l'avant), back (vers le bas) ;
  • durée : rightNow, eachFrame
  • style: gently (doucement), abruptly (rapidement), beginGently (commencer doucement), endGently (terminer doucement) ;
  • position: asIs
  • localisation: onTopOf (au-dessus de), below (au-dessous de), beneath (sous), inFrontOf (devant), inBackOf (derrière), behind, toLeftOf, toRightOf, onFloorOf, onCeilingOf
[edit] Avancer

Exemples

  • bunny move: left distance: 54 duration: 12 style: endGently.
  • camera
move: <sens>
move: <sens> distance: <nombre>
move: <sens> distance: <nombre> duration: <nombre>
move: <sens> distance: <nombre> duration: <nombre> style: <style>
move: <sens> asSeenBy: <acteur>
move: <sens> distance: <nombre> asSeenBy: <acteur>
move: <sens> distance: <nombre> duration: <nombre> asSeenBy: <acteur>
move: <sens> distance: <nombre> duration: <nombre> asSeenBy: <acteur> style: <style>
move: <sens> speed: <nombre>
move: <sens> speed: <nombre> for: <nombre>
move: <sens> speed: <nombre> until: <condition>
move: <sens> speed: <nombre> asSeenBy: <acteur>
move: <sens> speed: <nombre> asSeenBy: <acteur> for: <nombre>
move: <sens> speed: <nombre> asSeenBy: <acteur> until: <condition>

For moveTo, the position may be a { right. up. forward } triple or an <actor>. The triple values may be a number or asIs (ex. { asIs. 0. asIs } ).

moveTo: <position>
moveTo: <position> duration: <nombre>
moveTo: <position> duration: <nombre> style: <style>
moveTo: <position> asSeenBy: <acteur>
moveTo: <position> duration: <nombre> asSeenBy: <acteur>
moveTo: <position> duration: <nombre> asSeenBy: <acteur> style: <style>
moveTo: <position> eachFrameFor: <nombre>
moveTo: <position> eachFrameUntil: <condition>
moveTo: <position> asSeenBy: <acteur> eachFrameFor: <nombre>
moveTo: <position> asSeenBy: <acteur> eachFrameUntil: <condition>
moveTo: <position> speed: <nombre>
moveTo: <position> speed: <nombre> asSeenBy: <acteur> 
nudge: <direction>
nudge: <direction> distance: <nombre>
nudge: <direction> distance: <nombre> duration: <nombre>
nudge: <direction> distance: <nombre> duration: <nombre> style: <style>
place: <location> object: <acteur>
place: <location> object: <acteur> duration: <nombre>
place: <location> object: <acteur> duration: <nombre> style: <style>
place: <location> object: <acteur> eachFrameFor: <nombre>
place: <location> object: <acteur> eachFrameUntil: <condition>


Tourner

Useful constants direction: left, right, up, down, forward, back style: gently, abruptly, beginGently, endGently duration: rightNow, eachFrame

alignWith: <actor> alignWith: <actor> duration: <number> alignWith: <actor> duration: <number> style: <style>

For the pointAt command, a target may be an <actor>, a { right. up. forward } trip, or a x@y pixel value.

pointAt: <target> pointAt: <target> duration: <number> pointAt: <target> duration: <number> style: <style> pointAt: <target> duration: <number> eachFrameFor: <number> pointAt: <target> duration: <number> eachFrameUntil: <condition>

roll: <direction> roll: <direction> turns: <number> roll: <direction> turns: <number> duration: <number> roll: <direction> turns: <number> duration: <number> style: <style>

roll: <direction> asSeenBy: <actor> roll: <direction> turns: <number> asSeenBy: <actor> roll: <direction> turns: <number> duration: <number> asSeenBy: <actor> roll: <direction> turns: <number> duration: <number> asSeenBy: <actor> style: <style>

roll: <direction> turns: <number> speed: <number> roll: <direction> turns: <number> speed: <number> asSeenBy: <actor>

roll: <direction> speed: <number> roll: <direction> speed: <number> for: <number> roll: <direction> speed: <number> until: <condition> roll: <direction> speed: <number> asSeenBy: <actor> roll: <direction> speed: <number> asSeenBy: <actor> for: <number> roll: <direction> speed: <number> asSeenBy: <actor> until: <condition>

standUp standUpWithDuration: <number> standUpWithDuration: <number> style: <style>

turn: <direction> turn: <direction> turns: <number> turn: <direction> turns: <number> duration: <number> turn: <direction> turns: <number> duration: <number> style: <style>

turn: <direction> asSeenBy: <actor> turn: <direction> turns: <number> asSeenBy: <actor> turn: <direction> turns: <number> duration: <number> asSeenBy: <actor> turn: <direction> turns: <number> duration: <number> asSeenBy: <actor> style: <style>

turn: <direction> turns: <number> speed: <number> turn: <direction> turns: <number> speed: <number> asSeenBy: <actor>

turn: <direction> speed: <number> turn: <direction> speed: <number> for: <number> turn: <direction> speed: <number> until: <condition> turn: <direction> speed: <number> asSeenBy: <actor> turn: <direction> speed: <number> asSeenBy: <actor> for: <number> turn: <direction> speed: <number> asSeenBy: <actor> until: <condition>

For turnTo, the orientation may be a rotation about the { right. up. forward } axes or an <actor>. The triple values may be a number or asIs (ex. { asIs. 0. asIs } ).

turnTo: <orientation> turnTo: <orientation> duration: <number> turnTo: <orientation> duration: <number> style: <style>

turnTo: <orientation> asSeenBy: <actor> turnTo: <orientation> duration: <number> asSeenBy: <actor> turnTo: <orientation> duration: <number> asSeenBy: <actor> style: <style>

turnTo: <orientation> eachFrameFor: <number> turnTo: <orientation> eachFrameUntil: <condition> turnTo: <orientation> asSeenBy: <actor> eachFrameFor: <number> turnTo: <orientation> asSeenBy: <actor> eachFrameUntil: <condition>

turnTo: <orientation> speed: <number> turnTo: <orientation> speed: <number> asSeenBy: <actor>


Moving and Turning

Useful constants: target: asIs duration: rightNow, eachFrame style: gently, abruptly, beginGently, endGently

The target for setPointOfView may be another actor or a { rpos. upos. fpos. rrot. urot. frot } sextuple.

setPointOfView: <target> setPointOfView: <target> duration: <number> setPointOfView: <target> duration: <number> style: <style>

setPointOfView: <target> asSeenBy: <actor> setPointOfView: <target> duration: <number> asSeenBy: <actor> setPointOfView: <target> duration: <number> asSeenBy: <actor> style: <style>

setPointOfView: <target> eachFrameFor: <number> setPointOfView: <target> eachFrameUntil: <condition> setPointOfView: <target> asSeenBy: <actor> eachFrameFor: <number> setPointOfView: <target> asSeenBy: <actor> eachFrameUntil: <condition>


Resizing


Useful constants: dimension: topToBottom, leftToRight, frontToBack


A resize amount may be a <number> for uniform scaling or a { right. up. forward } triple for non-uniform resizing.

resize: <amount> resize: <amount> duration: <number> resize: <amount> duration: <number> style: <style> resize: <amount> eachFrameFor: <number> resize: <amount> eachFrameUntil: <condition>

resizeLikeRubber: <amount> dimension: <dimension> resizeLikeRubber: <amount> dimension: <dimension> duration: <number> resizeLikeRubber: <amount> dimension: <dimension> duration: <number> style: <style>

The size for a setSize are the desired { leftToRight. toptoBottom. frontToBack } dimensions.

setSize: <size> setSize: <size> duration: <number> setSize: <size> duration: <number> style: <style>

Waiting


wait wait: <number>


Actor Hierarchy


becomeChildOf: <actor> becomePart becomeFirstClass


Playing Sounds


playSound: 'soundfile.wav'


Changing Color


A color may be a named color (red, green, blue, orange, yellow, periwinkle, etc) or a { red. green. blue } triple.

setColor: <color> setColor: <color> duration: <number> setColor: <color> duration: <number> style: <style>

Changing Visibility


hide show

setVisibility: <number> setVisibility: <number> duration: <number> setVisibility: <number> duration: <number> style: <style>

Changing Texture


setTexture: 'texturefile.bmp'


Animated State


pause resume stop

Adding Reactions


Useful constants: event types: keyPress, leftMouseDown, leftMouseUp, leftMouseClick, rightMouseDown, rightMouseUp, rightMouseClick

addResponse: <block> to: <eventType> removeResponse: <response> to: <eventType> respondWith: <block> to: <eventType>

Destruction


destroy destroy: <duration>

[edit] Wonderlands

Creating

makeActor makeActorFrom: 'actorFile'

makeCamera


[edit] Compositions d'animations

doTogether and doInOrder both accept an ordered collection of animations.

doTogether: { animations } doInOrder: { animations }

[edit] Ressources

Personal tools