mirror of
https://forge.apps.education.fr/blender-edutech/blender-edutech-tutoriels.git
synced 2024-01-27 09:42:33 +01:00
Tutoriel 2 : gameplay, clavier et animation
This commit is contained in:
parent
389b6591a9
commit
08b53804dd
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,4 +1,5 @@
|
||||
import bge # Bibliothèque Blender Game Engine (BGE)
|
||||
import time
|
||||
|
||||
###############################################################################
|
||||
# labyrinthe.py
|
||||
@ -15,7 +16,7 @@ import bge # Bibliothèque Blender Game Engine (BGE)
|
||||
|
||||
# Récupérer la scène 3D
|
||||
scene = bge.logic.getCurrentScene()
|
||||
# print("Objets de la scene : ", scene.objects)
|
||||
# print("Objets de la scene : ", scene.objects) # Lister les objets de la scène
|
||||
|
||||
# Constantes
|
||||
|
||||
@ -28,46 +29,92 @@ ACTIVATE = bge.logic.KX_INPUT_ACTIVE
|
||||
# Gestion du clavier
|
||||
###############################################################################
|
||||
|
||||
# Initialisation
|
||||
def init(cont):
|
||||
|
||||
# Mémorisation de la position de départ du joueur
|
||||
obj = scene.objects['Bille']
|
||||
# obj = cont.owner
|
||||
obj['init_lx']=obj.worldPosition.x
|
||||
obj['init_ly']=obj.worldPosition.y
|
||||
obj['init_lz']=obj.worldPosition.z
|
||||
|
||||
# Cacher la panneau de la victoire
|
||||
scene.objects['Panneau victoire'].setVisible(False,True)
|
||||
|
||||
###############################################################################
|
||||
# Gestion du clavier
|
||||
###############################################################################
|
||||
|
||||
# Flèches pour tourner le plateau
|
||||
def clavier(cont):
|
||||
obj = cont.owner
|
||||
obj = scene.objects['Plateau']
|
||||
obj = cont.owner # obj est l'objet associé au contrôleur donc 'Plateau'
|
||||
# obj = scene.objects['Plateau']
|
||||
keyboard = bge.logic.keyboard
|
||||
resolution = 0.01
|
||||
|
||||
# Flèche haut - Up arrow
|
||||
if (ACTIVATE == keyboard.events[bge.events.UPARROWKEY]):
|
||||
if keyboard.inputs[bge.events.UPARROWKEY].status[0] == ACTIVATE:
|
||||
obj.applyRotation((-resolution,0,0), False)
|
||||
|
||||
# Flèche bas - Down arrow
|
||||
if (ACTIVATE == keyboard.events[bge.events.DOWNARROWKEY]):
|
||||
if keyboard.inputs[bge.events.DOWNARROWKEY].status[0] == ACTIVATE:
|
||||
obj.applyRotation((resolution,0,0), False)
|
||||
|
||||
# Flèche gauche - Left arrow
|
||||
if (ACTIVATE == keyboard.events[bge.events.LEFTARROWKEY]):
|
||||
if keyboard.inputs[bge.events.LEFTARROWKEY].status[0] == ACTIVATE:
|
||||
obj.applyRotation((0, -resolution,0), False)
|
||||
|
||||
# Flèche droit - Right arrow
|
||||
if (ACTIVATE == keyboard.events[bge.events.RIGHTARROWKEY]):
|
||||
if keyboard.inputs[bge.events.RIGHTARROWKEY].status[0] == ACTIVATE:
|
||||
obj.applyRotation((0, resolution,0), False)
|
||||
|
||||
###############################################################################
|
||||
# Gameplay
|
||||
###############################################################################
|
||||
|
||||
# Initialisation de la scène
|
||||
def init(cont):
|
||||
obj = cont.owner # obj est l'objet associé au contrôleur donc 'Bille'
|
||||
|
||||
# Mémorisation de la position de départ de la bille
|
||||
obj['init_x']=obj.worldPosition.x
|
||||
obj['init_y']=obj.worldPosition.y
|
||||
obj['init_z']=obj.worldPosition.z
|
||||
|
||||
# Cacher le panneau de la victoire et suspendre la physique du panneau cliquable
|
||||
scene.objects['Panneau victoire'].setVisible(False,True)
|
||||
scene.objects['Panneau victoire - plan'].suspendPhysics (True)
|
||||
|
||||
# Cycle (boucle de contrôle de la bille)
|
||||
def cycle(cont):
|
||||
obj = cont.owner # obj est l'objet associé au contrôleur donc 'Bille'
|
||||
obj['z']=obj.worldPosition.z # la propriété z est mis à jour avec la position globale en z de la bille
|
||||
obj_plateau = scene.objects['Plateau'] # obj_plateau est l'objet 'Plateau'
|
||||
obj_plateau['rot_x']=obj_plateau.worldOrientation.to_euler().x # propriété 'rot_x' mis à jour avec l'orientation globale en x du plateau
|
||||
obj_plateau['rot_y']=obj_plateau.worldOrientation.to_euler().y # propriété 'rot_y' mis à jour avec l'orientation globale en y du plateau
|
||||
obj_plateau['rot_z']=obj_plateau.worldOrientation.to_euler().z # propriété 'rot_z' mis à jour avec l'orientation globale en z du plateau
|
||||
|
||||
# Redémarrer la partie si la bille a chuté et si la panneau victoire n'est pas visible
|
||||
if obj['z'] < -20 and scene.objects['Panneau victoire'].visible == False:
|
||||
print ("Chuuuu.....te")
|
||||
|
||||
# Replacement du plateau (horizontal)
|
||||
while obj_plateau.worldOrientation.to_euler().x != 0 and obj_plateau.worldOrientation.to_euler().y !=0 and obj_plateau.worldOrientation.to_euler().z !=0 :
|
||||
obj_plateau.applyRotation((-obj_plateau.worldOrientation.to_euler().x, -obj_plateau.worldOrientation.to_euler().y, -obj_plateau.worldOrientation.to_euler().z), False)
|
||||
|
||||
# Mettre la bille à la position de départ avec une vitesse nulle
|
||||
obj.worldLinearVelocity=(0, 0, 0)
|
||||
obj.worldAngularVelocity=(0, 0, 0)
|
||||
obj.worldPosition.x = obj['init_x']
|
||||
obj.worldPosition.y = obj['init_y']
|
||||
obj.worldPosition.z = obj['init_z']+0.5
|
||||
|
||||
# Victoire (colision de la bille avec l'arrivée)
|
||||
def victoire(cont):
|
||||
scene.objects['Panneau victoire'].setVisible(True,True) # Afficher le panneau de la victoire
|
||||
scene.objects['Panneau victoire - plan'].restorePhysics() # Restaurer la physique du panneau cliquable
|
||||
start = 1
|
||||
end = 100
|
||||
layer = 0
|
||||
priority = 1
|
||||
blendin = 1.0
|
||||
mode = bge.logic.KX_ACTION_MODE_PLAY
|
||||
layerWeight = 0.0
|
||||
ipoFlags = 0
|
||||
speed = 1
|
||||
scene.objects['Panneau victoire'].playAction('Panneau victoireAction', start, end, layer, priority, blendin, mode, layerWeight, ipoFlags, speed)
|
||||
|
||||
# Fermer le panneau de la victoire (clic)
|
||||
def victoire_fermer(cont):
|
||||
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
|
||||
scene.objects['Panneau victoire'].setVisible(False,True) # Cacher le panneau de la victoire
|
||||
scene.objects['Panneau victoire - plan'].suspendPhysics (True) # Suspendre la physique du panneau cliquable
|
||||
scene.objects['Bille']['z']= -21 # On provoque le redémarrage si la bille est ressortie
|
||||
|
||||
###############################################################################
|
||||
# Joystick
|
||||
###############################################################################
|
||||
@ -157,10 +204,3 @@ def restart(cont):
|
||||
obj.worldPosition.x=obj['init_lx']
|
||||
obj.worldPosition.y=obj['init_ly']
|
||||
obj.worldPosition.z=obj['init_lz']
|
||||
|
||||
###############################################################################
|
||||
# Victoire
|
||||
###############################################################################
|
||||
|
||||
def gagne(cont):
|
||||
scene.objects['Panneau victoire'].setVisible(True,False)
|
||||
|
58
labyrinthe/2-python/icon_close.svg
Normal file
58
labyrinthe/2-python/icon_close.svg
Normal file
@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="icon_close.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata12">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1611"
|
||||
inkscape:window-height="1005"
|
||||
id="namedview10"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.668772"
|
||||
inkscape:cx="76.015361"
|
||||
inkscape:cy="-47.242768"
|
||||
inkscape:window-x="80"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg8" />
|
||||
<defs
|
||||
id="defs2" />
|
||||
<g
|
||||
id="g6"
|
||||
transform="translate(-71.909164,-76.103865)">
|
||||
<path
|
||||
d="m 139,110 c 0.53333,0 1,0.2 1.4,0.6 0.4,0.4 0.6,0.86667 0.6,1.4 v 6 l -8,8 8,8 v 6 c 0,0.56667 -0.2,1.05 -0.6,1.45 -0.4,0.36667 -0.86667,0.55 -1.4,0.55 h -6 l -8,-8 -8,8 h -6 c -0.56667,0 -1.05,-0.18333 -1.45,-0.55 -0.36667,-0.4 -0.55,-0.88333 -0.55,-1.45 v -6 l 8,-8 -8,-8 v -5.95 c 0,-0.56667 0.18333,-1.05 0.55,-1.45 0.4,-0.4 0.88333,-0.6 1.45,-0.6 h 6 l 8,8 8,-8 h 6"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;stroke:none"
|
||||
sodipodi:nodetypes="csscccscscccscscccscscccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
Loading…
Reference in New Issue
Block a user