« 1 2 3 4 (5) 6 »


Re: DarkRise
OverdOzed
Inscrit:
06/07/2009 09:22
De Fraggle Rock
Post(s): 5782
sinon tu as ça:


pour importer le sensor d'un objet sur un autre

edit: enfin un keymap en python :



c'est un peu plus digeste que ton système, enfin je dis ça pour ta santé moi

Contribution le : 03/11/2010 17:29
_________________
ce n'est pas parce que l'on ne se comprend pas qu'il ne faut pas chercher à se faire entendre
Le chat du BUG
Créer un fichier PDF de la contribution Imprimer


Re: DarkRise
Fou Furieux du Clan
Inscrit:
03/09/2007 09:46
Post(s): 295
Bardaf . Ca en fait de la lecture

Oui j'ai oublié de préciser : c'est déjà la rentrée, et en tant qu'étudiant (pseudo) bosseur, j'aurai bien moins de temps pour bosser le jeu
Hors de question que je le laisse en suspens, mais ça avancera beaucoup moins vite, donc les plateaux ça sera pas pour demain

Sinon pour vos scripts pythons, je dit OUCH (pour moi c'est du chintok). Auraiez-vous l'aimabilité de me dire quelle suite de briques logiques faire et avec quel scripth python précisément ? (Je le demande aussi gentiment soit-il, car oui c'est un manque de rigueur de ma part, mais je n'ai pas envie de plus me prendre la tête et détaler le sujet sur plusieurs pages encore pour une misérable brique logique, alors je fais appel à vos connaissances qui me surpassent en la matière )

Contribution le : 04/11/2010 21:11
_________________
Shake your coconuts !
Créer un fichier PDF de la contribution Imprimer


Re: DarkRise
OverdOzed
Inscrit:
06/07/2009 09:22
De Fraggle Rock
Post(s): 5782
Citation :

Yunshi a écrit:

je fais appel à vos connaissances qui me surpassent en la matière )


vu que je me suis mis au bge samedi dernier, je pense pas, allez ça fait qu'une petite page de rien du tout

les briques nécessaires sont: un sensor keybord sur allkey, un controleur python et un actuator ou plus tous ça linké

Contribution le : 04/11/2010 22:21
_________________
ce n'est pas parce que l'on ne se comprend pas qu'il ne faut pas chercher à se faire entendre
Le chat du BUG
Créer un fichier PDF de la contribution Imprimer


Re: DarkRise
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
Tu veux un script Python pour quoi faire ?
Si c'est pour les touches, Edddy t'a donné la base en briques logiques dans la deuxième image de son dernier post.
[edit] Oui, ça doit être ça. - Bonne lecture. [/edit]
Pour ce qui s'agit du script après, c'est pas le plus évident pour commencer, mais tu devrais y arriver quand même.
En gros, il faut récupérer à partir du sensor quelles touches ont été appuyées et activer en conséquence les actuators.
L'avantage, c'est que les touches peuvent être très facilement changées et même pendant le jeu si tu veux, en enregistrant dans des variables les touches de déplacement (par exemple). Enfin pour commencer, je te donne quelques indices :
Pour gérer les touches, il faut le module GameKeys donc "import GameKeys (as gk)" (sans les parenthèses, c'est juste que tu le mets où tu le mets pas, le "as gk", mais perso, je trouve ça plus simple d'écrire ensuite gk que GameKeys à chaque fois).
Après, il faut commencer par récupérer le controller (GameLogic.getCurrentController()) afin de récupérer tout ce qui est attaché.
Appelons le "cont" (au hasard ).
A partir de là, on va chercher le sensor keyboard, comme ceci :
keyboard = cont.sensors["nom_du_sensor_keyboard"]

Ça va jusque là ? C'est pas trop dur. Le principe, c'est qu'il faut toujours passer par le controller qui a lancé le script. C'est un des deux seuls lien, avec getCurrentScene() avec les objets et les briques. De cette façon, cont.sensors contient tous les sensors rattachés au controller, cont.actuators les actuators, cont.owner l'objet possesseur du controller...

A partir de ce sensor keyboard, on va extraire la liste des touches qui ont agit :
keylist = keyboard.events


keylist est, comme son nom l'indique, une liste. Elle est donc susceptible de contenir plusieurs éléments (si plusieurs touches ont été enfoncées par exemple). Pour traiter chaque touche, on va devoir parcourir la liste élément par élément. Pour cela, il existe ce que l'on appelle des boucles. En python, la boucle qui permet de parcourir une liste est la boucle for ... in : (ne pas oublier les deux points qui annoncent un bloc de texte indenté.
Ainsi, "for element in liste :" va exécuter la portion de code plusieurs fois en attribuant à la variable "element" successivement les différentes valeurs contenues dans liste. Donc si liste = ['a', 2, 1.0025], le code sera exécuté 3 fois : une avec element = 'a', une avec element = 2 et une dernière avec element = 1.0022
Revenons à notre cas : admettons que keylist = [touche1, touche2]. On veut donc qu'une certaine variable (appelons là "key") prenne la valeur de touche1 puis la valeur de touche2, exécutant deux fois le même code.
On obtient donc ceci :
for key in keylist :

Ensuite, pour indiquer quelle partie du code il faudra répéter, il faut l'indenter, c'est-à-dire l'espacer un peu de la marge. Pour cela, tu peux utiliser ce que tu veux : un espace, deux espaces, quatre espaces, une tabulation, vingt tabulations...
Donc à partir de là, tout le traitement de la touche, celui qui sera effectué plusieurs fois, devra être indenté de façon régulière (toujours deux espaces par exemple, il ne faut pas changer en cours de route !).

En fait, les éléments de keylist sont eux-même des listes. Mais là, pas besoin de boucle car on connait la taille de ces listes : 2. Cela signifie qu'il existe deux éléments dans cette liste : key[0] et key[1]. Oui, le dernier élément est bien le 1 lorsqu'il y en a 2 car le zéro compte (il ne faut surtout pas l'oublier !).
key[0] correspond à la touche et key[1] à son statut.
Les statut possibles sont stockés dans les variables suivantes :
GameLogic.KX_INPUT_ACTIVE -> La touche est enfoncée
GameLogic.KX_INPUT_JUST_ACTIVATED -> La touche commence tout juste à être enfoncée
GameLogic.KX_INPUT_JUST_RELEASED -> La touche vient d'être relachée
GameLogic.KX_INPUT_NONE -> La touche n'est pas enfoncée
Dans le cas d'un mouvement, on vérifie si le statut est bien GameLogic.KX_INPUT_ACTIVE grâce à une condition.
Une condition commence par if et termine par deux points. Ces deux points signifie toujours que le code qui suit va être indenté d'un rang de plus qu'avant. Il était déjà indenté d'un rang pour la boucle, il sera donc indenté de deux rangs. Les différents rangs ne sont pas obligatoirement de même taille, mais c'est plus lisible d'être régulier quand même.
Donc on n'en arrive à là :
for key in keylist :
  if key[1] == GameLogic.KX_INPUT_ACTIVE :
    # Le code à n'exécuter que si la condition est vérifiée (quatre espaces dans mon cas)
    # (après le symbole "#", le code n'est plus pris en compte, ce qui permet de faire des commentaires plus lisibles que le code)

Les deux signes '=' ne sont pas une erreur. En effet, en programmation on fait la distinction entre le = d'assignation et le == de test logique.
Maintenant, si c'est bien le cas, on regarde quelle touche est enfoncée dans key[0].
Les valeurs possibles sont listées sur cette page.
Devant chaque constante (à toujours mettre en majuscules), il faut mettre GameKeys. ou gk. (selon la première ligne). Pour ne pas avoir à l'écrire, il aurait fallu, en première ligne, écrire "from GameKeys import *", ce qui n'est d'ailleurs pas une mauvaise idée.
Donc là encore on va devoir utiliser une condition en comparant grâce au '==' key[0] aux différentes touches attendues. Mettons qu'on ne puisse aller, comme dans ton jeu, qu'à droite (D) et à gauche (Q). On aura donc deux tests à faire :
for key in keylist :
  if key[1] == GameLogic.KX_INPUT_ACTIVE :
    if key[0] == GameKeys.DKEY :
      # Aller à droite
    elif key[0] == GameKeys.QKEY :
      # Aller à gauche


Tu remarqueras peut-être le "elif". C'est une contraction de else (sinon) et if. Cela veut donc dire "sinon, si" En effet, on est sûr que si la touche est D, ça ne sert à rien de regarder si elle est Q ensuite puisqu'elle ne peut pas être les deux à la fois. Si les deux sont appuyées en même temps, key[0] n'aura pas les deux valeurs, mais je rappelle que ce code est exécuté une fois par touche.
Donc ça permet d'éviter de faire trop réfléchir l'ordinateur, ce qui n'est jamais bon.

Ne reste plus qu'à voir comment aller à gauche et à droite, c'est-à-dire comment activer un actuator.
Pour cela, ce n'est pas bien compliqué : on utilise le controller (comme toujours) et on indique le nom de l'actuator, comme ceci :
cont.activate("actuator_pour_aller_a_droite"]

et pour le desactiver (on sais jamais )
cont.deactivate("actuator_pour_aller_a_droite"]


Bon, je te laisse recoller les morceaux et voir ce que ça donne. En cas de problème, j'expliquerais volontiers les points sombres de mon histoire.

Contribution le : 04/11/2010 22:21
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer


Re: DarkRise
Fou Furieux du Clan
Inscrit:
03/09/2007 09:46
Post(s): 295
J'avais déjà lu plusieurs chapitres sur Le Site Du Zéro pour le Python, et je reconnais quasiment tout les "principes" que tu as utilisé bobibou Cependant oui je ne connaissais pas du tout les formules pour appeler les Logiques etc etc ... Bref, loin de là l'envie de vous embêter (vous allez finir pas m'en vouloir je pense), quand je parlais de script python, c'était pour le RightCtrl, non pas le déplacement gauche/droite (qui je l'accorde est en fait 100 fois plus simple...je vais regarder quand même un peu ça). Mais bon cela dit, il est vrai que pour induire la touche RightCtrl dans le jeu, je pense que le plus simple est de passer le fichier à quelqu'un pour qu'il y mette cette touche, puis je récupère le fichier. Bien entendu je n'impose rien, et je ne ralerai pas si personne ne veut. En cas contraire, je lui serai extrêmement reconnaissant
Je vais refaire un fichier, sans les musiques, et préalablement sélectionner l'objet nécessitant la brique logique en question qui requiert la touche RightCtrl. Pour faciliter la tâche parce que c'est vrai que si l'on fait face à ce b***** sans savoir qu'est-ce qui fait quoi, ça fait peur .

Haem, je suis passé peut-être un peu vite sur le sujet : merci bobibou pour avoir pris la peine de m'informer comme il fallait ! T'as du prendre un petit moment pour écrire le message On a de la chance d'avoir des membres aussi investis sur le forum, et je compte bien en profiter

Contribution le : 06/11/2010 11:29
_________________
Shake your coconuts !
Créer un fichier PDF de la contribution Imprimer


Re: DarkRise
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
Ah bah pour la touche rightCtrl, c'est comme ce que je t'ai montré, mais en changeant GameKeys.DKEY en GameKeys.RIGHTCTRLKEY.
Le principe de ce script n'est pas juste de faire gauche/droite mais tous les contrôles clavier en un script.
Le gros avantage, c'est qu'après tu peux charger un fichiers "touches.conf" (par exemple) dans lequel tu as la liste de toutes les actions et des touches correspondantes. Comme ça, on peut tout changer simplement !
Exemple de fichier conf :
mvt_droite 24
mvt_gauche 22
pause 5
...

Comme ça, au lieu de mettre dans le script GameKeys.QKEY, tu peux mettre touche["mvt_gauche"].
Parce qu'en fait, GameKeys.QKEY et les autres ne sont que des nombres entiers.

Enfin si tu veux, je te le fait, ton actuator.

Contribution le : 06/11/2010 12:45
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer


Re: DarkRise
OverdOzed
Inscrit:
06/07/2009 09:22
De Fraggle Rock
Post(s): 5782
bon je te l'envoie, mais je trouve ça un peu dommage, c'était un bon prétexte pour te mettre à Python/BGE

et j'ai pas trouvé ce qui pesait si lourd dans ce fichier alors comme j'ai pas un super upload, il y en a bien pour une heure

j'édite dès que c'est passé

faudrait peut-être songer à alléger tout ça, sinon avec un plateau en plus ça ne tiendra plus sur warrenberberd



bon j'étais un peu pessimiste, 20mn auront suffi
je t'ai mis un rightShift en prime, on sait jamais

mais si tu te mets à Python, vu ce que tu fais déjà sans, tu nous ferais péter les rétines

Contribution le : 06/11/2010 12:50
_________________
ce n'est pas parce que l'on ne se comprend pas qu'il ne faut pas chercher à se faire entendre
Le chat du BUG
Créer un fichier PDF de la contribution Imprimer


Re: DarkRise
Fou Furieux du Clan
Inscrit:
03/09/2007 09:46
Post(s): 295
Merci beaucoup à vous !

Et sinon, si le fichier pèse si lourd, c'est à cause de la bande son . Le BGE ne supporte que les .wav, donc forcément ça prend une place plutôt considérable ...

Contribution le : 06/11/2010 13:29
_________________
Shake your coconuts !
Créer un fichier PDF de la contribution Imprimer


Re: DarkRise
OverdOzed
Inscrit:
06/07/2009 09:22
De Fraggle Rock
Post(s): 5782
de rien et quel âne je fais, j'avais pas pensé à la bande son

bonne suite

ps: le prochain sera peut-être sur la 2.5 avec le son en mp3

Contribution le : 06/11/2010 13:34
_________________
ce n'est pas parce que l'on ne se comprend pas qu'il ne faut pas chercher à se faire entendre
Le chat du BUG
Créer un fichier PDF de la contribution Imprimer


Re: DarkRise
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
Ou alors tu utilises Python et là tu choisis le format que tu veux.

Contribution le : 06/11/2010 14:09
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
« 1 2 3 4 (5) 6 »




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Hors Sujet !! Tutoriels "Bonhomme de neige avec EEVEE" 7 108 Aujourd'hui 14:32:27
Bibi09 
[WIP] et travaux terminés [terminé] Imprimante à jet d'encre industrielle    [1][2] 11 2549 Aujourd'hui 14:26:48
JaAlVir657 
[WIP] et travaux terminés [WIP] BUDY3000 prochain tuto spécial : modélisation semi mécanique    [1][2] 10 251 Aujourd'hui 13:58:42
Guiu 
Questions & Réponses Animation 2D débutant 7 95 Aujourd'hui 13:28:35
meltingman 
Python & Plugins ajouter plusieurs fois le même objet avec le même retard 1 28 Aujourd'hui 13:25:46
meltingman 
Hors Sujet !! Comment se servir du Vertex Group- créer une fiole sans déplacer un vertex 0 14 Aujourd'hui 12:32:01
meltingman 
Questions & Réponses [WIP] Typo 6 166 Hier 22:45:30
Laorz 
Questions & Réponses [physique] patte à modeler 2 27 Hier 22:00:39
prometheusx 
The Blender Clan 'tchat Blender 2.8x : Actus, tests, feedback..    [1][2][3]...[7] 66 37900 Hier 19:10:37
lucky 
Questions & Réponses Particules qui tombent puis restent collées à la surface 3 71 Hier 13:17:11
Bibi09 
[WIP] et travaux terminés [WIP] Les wips à Chikin    [1][2] 11 2524 01/12 19:24:49
chikin 
Python & Plugins script python pour dupliquer un objet et fusionner le tout    [1][2] 14 289 01/12 18:15:17
neonclignote 
Questions & Réponses Je perds sans arrêts mes shaders! 9 91 01/12 16:59:53
titisteph 
Questions & Réponses [résolu] Compter les vertices 2 56 01/12 16:15:45
zeromeetsinfinity 
Questions & Réponses Bump map pixellisée    [1][2][3] 21 315 01/12 14:31:41
moonboots 
Questions & Réponses [non résolu] Mettre du texte sur un sujet 3d    [1][2][3] 21 736 01/12 10:43:08
Lady 
Questions & Réponses Ajouter l'effet de deux shaders? 2 119 01/12 09:07:13
titisteph 
[WIP] et travaux terminés [terminé] Photogrammétrie : Meshroom ! 4 91 30/11 22:43:07
Bibi09 
Hors Sujet !! Tuto rapide - Tips Astuce - mixer des matériaux - créer un marécage 8 141 30/11 19:52:59
meltingman 
Questions & Réponses lampe chinoise effet de lumiere 5 89 30/11 16:24:16
prometheusx 

Qui est en ligne
241 utilisateur(s) en ligne (dont 140 sur Forums)

Membre(s): 0
Invité(s): 241


plus...
Nouveaux membres
RoderickSc 3/12/2020
RobbyZ0493 3/12/2020
CorrineStr 3/12/2020
kerju2002 2/12/2020
bugsheep 29/11/2020
gto37 29/11/2020
Augustus_Strix 28/11/2020
yocodream 28/11/2020
Pandore62 27/11/2020
Kristof_LEDRU 26/11/2020
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Dec 29
Anniversaire d'ebrain
Jan 9
BUG de Lyon
Fev 15
Anniversaire de Dany
plus 263 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2020 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445