|
|
| Auteur | Message |
|---|
shikor Très bonne participation

Nombre de messages: 153 Localisation: REIMS Projet Actuel: Saint Seiya : La Légende des Chevaliers Avancement:
 | Sujet: Re: Questions de Shikor. Jeu 24 Sep - 15:21 | |
| Désolé Sekigo mais avec les masks, ça ne marche pas. J'ai aussi essayé mask_index mais il m'affiche le sprite sans l'animer. J'ai réussi à l'animer avec ceci dans DRAW : | Code: | var a;
image_speed = 0.3
if keyboard_key = 0 { sprite_index = heros_face; a=0;}
if keyboard_check(vk_left) { sprite_index = heros_gauche; a=-1;}
if keyboard_check(vk_right) { sprite_index = heros_droite; a=-1;}
if keyboard_check(vk_down) { sprite_index = heros_face; a=-1;}
if keyboard_check(vk_up) { sprite_index = heros_dos; a=-1;} draw_sprite(sprite_index,a,x,y) |
Le soucis c'est que :
- Quand je relache une touche, il m'affiche le sprite "vue de bas" alors que j'aimerais qu'il reste dans la dernière direction.
- Toujours le même soucis avec la tête, il se téléporte quand même.
Merci à Linky439 et Sekigo pour DRAW et non STEP  |
|
 | |
Sekigo Le Magnifique Utilisateur confirmé: Rang ***

Nombre de messages: 722 Avancement:
 | Sujet: Re: Questions de Shikor. Jeu 24 Sep - 22:21 | |
| Ton sprite reprend sa position initiale quand tu relaches les touches, car le keyboard_key prend comme valeur 0 lorsque toutes les touches sont relaches. Bon, je vais te faire un exemple dans moins de 10 minutes, le temps de finir de fumer et d'allumer mon pc ( je m'exhibe sur le web, 10 euros\minute ). ----------------------------------------------------------------------------------------- Edit => Et voilà. La collision dépend du mask, et non du sprite. Tu pourras faire un essai, il faut SEULEMENT que le centre du sprite soit en collision avec l'autre objet pour qu'il y ai téléportation. http://willhostforfood.com/?Action=download&fileid=86269 _________________ 3==D (_¤_) ( Y ) 8===D --- (.Y.)
|
|
 | |
shikor Très bonne participation

Nombre de messages: 153 Localisation: REIMS Projet Actuel: Saint Seiya : La Légende des Chevaliers Avancement:
 | Sujet: Re: Questions de Shikor. Ven 25 Sep - 6:22 | |
| Sekigo Ton exemple ne fonctionne pas pour moi : - Tout d'abord mon sprite (pour le mask comme tu dit) est animé. - De plus, quand je définis une apparence pour le mk_joueur, il ne me l'affiche pas. - Mais la téléportation se fait quand même sans que la flèche obj_Joueur ne touche l'objet obj_Go (je suppose que c'est le sprite msk_joueur qui touche obj_Go) Dans mon exemple, je voudrais que quand je ne touche plus au bouton, mon perso reste dans la dernière position en stand-by (qu'il ne s'anime plus ^^) J'ai réussi à le faire avec une variable mais lors du chargement de la room pour la 1ère fois, ça ne marche pas car au début jeu, je ne touche à aucun bouton et mon apparence du héros est invisible. Mais dès que je touche à un bouton, j'ai l'apparence de mon héros puis le déplacement est nickel et il est en stand-by dans la dernière direction quand je ne touche plus au bouton. J'ai fait un autre test :- je déclare une variable exemple "vue"; - je lui affecte la valeur 0; - Quand je touche un bouton il ca omme valeur (1 pour le haut, 2 pour la gauche, 3 pour droite); Mais comme c'est une boucle, il me réaffecte à chaque fois la valeur 0 donc quand je relâche un bouton, mon perso est en direction du bas. Existe t-il un moyen de déclarer un variable de l'affecter une valeur de départ puis de ne plus revenir sur cette affectation de valeur ?Edit :Je te renvoie ton fichier avec une apparence au mk_Joueur http://rapidshare.com/files/284669277/Pour_Shikor___Collision_et_Image.gmk |
|
 | |
Sekigo Le Magnifique Utilisateur confirmé: Rang ***

Nombre de messages: 722 Avancement:
 | Sujet: Re: Questions de Shikor. Ven 25 Sep - 13:03 | |
| Je crois savoir d'où vient ton problème. Tu confonds sprite et mask. Le sprite est ce qui est affiché. Le mask ne s'affiche pas, et ne sert qu'au événements de collision. En gros, c'est comme la bounding box de base de l'éditeur de sprite, sauf que tu n'es plus contraint uniquement à un carré et tu peux l'utiliser en série pour des sprites ayant les mêmes caractéristiques ( de taille principalement ). Ton sprite, c'est ton bonhomme, c'est ce qui doit être afficher pour le joueur, afin qu'il ait autre chose qu'un carré devant les yeux en guise de personnage. Par contre, pour le moteur interne de GM, on s'en fout de ton sprite. Ce qui est important, c'est la collision avec les autres instances. Donc, l'intérêt de mettre un mask est de réduire le sprite au mask pour tout ce qui est collision ( et est invisible à l'oeil humain, cela se passe uniquement en terme de calcul ).  Edit => Petite precision au cas ou. Quand tu ne definis pas de mask a une instance, les evenements de collision prennent la bounding box comme caracteristique. Qui est de la taille de ton sprite sans transparence par defaut. -------------------------------------------------------------------------------------- Pour ton second problème : | Code: | if keyboard_check(vk_left) { sprite_index = heros_gauche; a=-1;}
if keyboard_check(vk_right) { sprite_index = heros_droite; a=-1;}
if keyboard_check(vk_down) { sprite_index = heros_face; a=-1;}
if keyboard_check(vk_up) { sprite_index = heros_dos; a=-1;}
|
( J'ignore à quoi sert la variable a, donc, dans le doute, on l'a laisse ). J'ai juste viré le "if keyboard_check=0 blablabla" qui justement empêche ton sprite de garder le même sprite lorsque tu relaches la touche. Et surtout, oublie le draw pour ton problème, mets ce code dans l'événements step. Et tu définis ton sprite avec l'option adapté dans la fenêtre des objets. Tu n'as pas besoin de dessiner le sprite manuellement à l'heure actuelle, tu peux laisser Game Maker s'en charger tout seul.
N'oublie pas de mettre image_speed=0 dans l'événement Create, et normalement, cela devrait être bon. ( Normalement..... j'espère ).
-------------------------------------------------------------------------------------- En espérant avoir compris ta question et tes attentes, parce que ce n'était pas très clair, de toi à moi. _________________ 3==D (_¤_) ( Y ) 8===D --- (.Y.)
|
|
 | |
shikor Très bonne participation

Nombre de messages: 153 Localisation: REIMS Projet Actuel: Saint Seiya : La Légende des Chevaliers Avancement:
 | Sujet: Re: Questions de Shikor. Ven 25 Sep - 17:24 | |
| Merci Sekigo. J'ai mieux compris la différence entre mask et sprite. Ma variable "a" sert à dire à GM si mon sprite est animé ou pas (0 pour pas animation et -1 pour animation) Avec ta solution, mon sprite est toujours animé... d'un côté mon problème est résolu mais un autre problème se profile Je vais essayé d'y remédier, si vous avez une idée. N'hésitez pas  |
|
 | |
shikor Très bonne participation

Nombre de messages: 153 Localisation: REIMS Projet Actuel: Saint Seiya : La Légende des Chevaliers Avancement:
 | |
 | |
Playboy Utilisateur confirmé: Rang ***

Nombre de messages: 636 Localisation: Sur la lune Projet Actuel: Sur le pont du Charles de Playboy Avancement:
 | Sujet: Re: Questions de Shikor. Ven 25 Sep - 17:59 | |
| Hey hey je te félicite ! Tu essayes par toi même ! Tu comprends et tu améliores ! Et en plus tu te diriges dans la voie du GML !! Grand bien te fasse et longue vie à ton code lol. _________________ [Démo du RPG (30 Juin 2009) = Aeris] ------------------ [Jeux Finis/Mon topic = Laguna]   |
|
 | |
shikor Très bonne participation

Nombre de messages: 153 Localisation: REIMS Projet Actuel: Saint Seiya : La Légende des Chevaliers Avancement:
 | Sujet: Re: Questions de Shikor. Ven 25 Sep - 18:36 | |
|  merci Playboy Je trouve que le GML est beaucoup mieux que le D&D mais il faut bien le comprendre Voilà mon problème de déplacement est réglé, j'en ai un autre : Les téléportations.... J'ai réussi pour une téléportation mais si j'en ai plusieurs sur une room comment faire ? |
|
 | |
Linky439 Utilisateur confirmé: Rang ****

Nombre de messages: 987 Localisation: Sur le forum du CBNA...ou pas Projet Actuel: Terminator Begins Avancement:
 | |
 | |
Sekigo Le Magnifique Utilisateur confirmé: Rang ***

Nombre de messages: 722 Avancement:
 | Sujet: Re: Questions de Shikor. Ven 25 Sep - 23:24 | |
| Sur Game Maker, et dans la prog en general, il y a rarement une facon de faire. Par exemple, selon le code que tu nous as fourni, j'aurais utilise une autre maniere pour l'affichage de sprite ( c'est d'ailleurs ce que j'ai fais sur un petit projet de rpg que je fais pour le fun ). Cela ne veut pas dire pour autant que ta maniere est fausse, chacun doit pouvoir adapter son code suivant son style et ses besoins. Tout cela pour dire que tu peux, par exemple, utiliser les I.D. de chaque instance pour teleporter le joueur. Ou encore utiliser leurs positions respective. Ou encore un objet general qui gere toutes les teleportations au sein d'une map. Par contre, je rejoins l'avis de Linky439. Ne cree pas 30000 objets differents pour les teleportations, c'est long et fastidieux, et cela peut etre simplement resolu par un probleme de variable propre a chaque instance. Par la meme, tu comprendras les termes objets/instances. En tout cas, ravi d'avoir pu t'aider. _________________ 3==D (_¤_) ( Y ) 8===D --- (.Y.)
|
|
 | |
shikor Très bonne participation

Nombre de messages: 153 Localisation: REIMS Projet Actuel: Saint Seiya : La Légende des Chevaliers Avancement:
 | Sujet: Re: Questions de Shikor. Lun 28 Sep - 15:45 | |
| Justement sekigo, Je ne veux pas créer XXXX objets différents pour les téléportations, je cherche un moyen pour le faire simplement avec un seul objet téléportation. Le seul hic, c'est que je ne vois pas comment faire avec les ID des instances de l'objet téléportation. J'ai cherché que ce soit dans le forum ou dans l'aide de GM, je ne vois pas comment faire. J'ai essayé "collision_point".... les ID.... mais je pense que je ne rentre pas les bonnes syntaxes. Si vous avez un conseils pour me mettre sur la voie de la bonne syntaxe. Donc je repose mon problème : Sur une room, j'ai plusieurs endroits de téléportations, comment faire savoir à GM que chaque téléportation a des rooms de destinations différentes ? J'ai comme objet : "teleporte" et "heros" Merci d'avance. EDITDans creation code de la room j'ai mis | Code: | instance_create(320,186,teleporte) |
Puis dans l'event draw, j'ai mis ceci pour connaitre l'ID de mon instance que j'ai crée :
| Code: | draw_text(100,100,instance_place(320,186,teleporte)) |
il m'affiche 100057
puis j'ai mis dans creation code de ma room :
| Code: | if other.id = 100057 {x=50; y=50; transition_kind=21; room_goto(Bois);} |
mais cela ne fonctionne pas.... bonne syntaxe ???? |
|
 | |
Wargamer *Excellent utilisateur*

Nombre de messages: 4318 Localisation: qui s'y interesse?>> Projet Actuel: Bataille de cake au fruits Avancement:
 | Sujet: Re: Questions de Shikor. Lun 28 Sep - 17:03 | |
| à la limite, dans l'editeur de room avec shit + click droit je croit tu peux ajouter du code direct dans l'objet genre un variable qui dit sa destination  _________________ Je suis un  dans le GM Quiz!  | Spoiler: | | |  |
|
|
 | |
shikor Très bonne participation

Nombre de messages: 153 Localisation: REIMS Projet Actuel: Saint Seiya : La Légende des Chevaliers Avancement:
 | Sujet: Re: Questions de Shikor. Mar 29 Sep - 4:43 | |
| Non shift+clic droit c'est "effacer tout" mais crtl+clic droit, ça nous ouvre un menu contextuel et on peut choisir "creation code..." qui nous permet de rentrer un code pour cette instance. Mais quand on rentre un code comme ceci cela affecte toutes les autres instances de cet objet. J'ai essayé : * en entrant un code pour une instance et pas dans l'autre. Mon héros se téléporte même si il touche la téléportation qui n'a pas de code. * en entrant un code pour chaque instance de téléportation. La téléportation se fait avec les données du dernier code entré. Dommage..... Comment utilise t-on collision_point ?j'ai mis dans creation code de la room : | Code: | instance_create(320,186,teleporte)
global.type = collision_point(336,218,all,true,false) |
puis dans l'event draw de mon heros :
| Code: | draw_text(100,50,global.type) |
au départ, il m'affiche -4
Mais quand je déplace mon héros sur ce point (336,218)
Il m'affiche toujours -4 alors qu'il devrait m'afficher l'ID de l'objet en collision, non ? |
|
 | |
Wargamer *Excellent utilisateur*

Nombre de messages: 4318 Localisation: qui s'y interesse?>> Projet Actuel: Bataille de cake au fruits Avancement:
 | Sujet: Re: Questions de Shikor. Mar 29 Sep - 12:03 | |
| ba je veux dire dans le truc de create dans la room tu dit exemple, posx=270 posy=80 et quand il entre en conteact tu fait joueur.x=posx;joueur.y=posy pour le colision point je sais pas j'utlise jamais _________________ Je suis un  dans le GM Quiz!  | Spoiler: | | |  |
|
|
 | |
shikor Très bonne participation

Nombre de messages: 153 Localisation: REIMS Projet Actuel: Saint Seiya : La Légende des Chevaliers Avancement:
 | Sujet: Re: Questions de Shikor. Mar 29 Sep - 12:11 | |
| Pour ton exemple Wargamer, comment lui dire que la destination est différente pour chaque instance de téléportation ? car je le répète j'ai plusieurs lieux de téléportation sur la room. Je suis en train de me griller tous mes neurones sur ce problèmes (déjà que je n'en ai pas beaucoup  ) |
|
 | |
Playboy Utilisateur confirmé: Rang ***

Nombre de messages: 636 Localisation: Sur la lune Projet Actuel: Sur le pont du Charles de Playboy Avancement:
 | Sujet: Re: Questions de Shikor. Mar 29 Sep - 13:29 | |
| Alors je vais pas essayer de corriger le système de Wargammer  Il va marcher après les corrections mais je vais donner une autre voie pour faire ce que tu veux  Je sais pas si c'est mieux, plus rapide ou autre mais je propose. Il faut mettre dans l'event de collision de ton objet de téléportation (lorsqu'il touchera le héros) | Code: | for (i=0;i<=instance_number(obj_teleporte);i=i+1) { if (id==instance_?(obj_teleporte,i)) { obj_heros.teleportation=i } } |
Tu mets dans ton objet héros :
create event :
step event :
| Code: | if (teleportation==1) {room_goto(?)) if (teleportation==2) {x=?,y=?) if (teleportation==3) {...) . . . etc |
Et tu remplis pour le nombre d'objet de téléportation qu'il y aura
Ainsi tu ne crée qu'un seul objet et tu peux le téléporter où tu veux Ce code par contre ne marche que pour des téléportation intraroom Sinon tu dois spécifier pour chaque room chaque obj de téléportation 
Exemple :
| Code: | if (room==?) { if (teleportation==1) {room_goto(?)} if (teleportation==2) {x=?,y=?} if (teleportation==3) {...} . . . etc } . . . etc |
La fonction "fonction_?" c'est en fait que j'ai oublié son nom mais elle prends en paramètre le type d'objet et le numéro que l'on veut et ca retourne l'id de la i+1em instance de cette objet. Elle se trouve dans la même page d'aide que la fonction instance_number (et je la soupçonne de s'appeller instance_furthest) Mais bon après à toi de voir  _________________ [Démo du RPG (30 Juin 2009) = Aeris] ------------------ [Jeux Finis/Mon topic = Laguna]   |
|
 | |
shikor Très bonne participation

Nombre de messages: 153 Localisation: REIMS Projet Actuel: Saint Seiya : La Légende des Chevaliers Avancement:
 | Sujet: Re: Questions de Shikor. Mar 29 Sep - 13:37 | |
| après maintes recherches, j'ai trouvé sur le forum de YoyoGames, un tutorial qui marche à merveille !!!! YOUPI !!!! Cela résout mon problème de multiple téléportations sur une room. C'est avec le ctrl+clic droit que Wargamer m'a conseillé. Alors dans l'objet "téléportation", il faut mettre dans l'event collision avec le héros : | Code: | { other.x = teleX; other.y = teleY; if (teleroom > -1) { room_goto(teleroom);} }
| Puis dans creation code d'une instance (ctrl+clic droit), il faut mettre :
| Code: | { teleX = 100; teleY = 200; teleroom = Bois; } |
Et dans une autre :
| Code: | { teleX = 50; teleY = 50; teleroom = Village; } |
Mon héros quand il touche l'instance téléportation 1, il va bien dans la room Bois et aux coordonnées 100,200.
Et quand il touche l'instance téléportation 2, il va bien dans la room Village et au coordonnées 50,50.
C'est trop bien !!!
Merci quand même Playboy mais ce tuto est plus simple à utiliser 
Je pense que je dois m'entrainer sur la syntaxe des fonctions. |
|
 | |
shikor Très bonne participation

Nombre de messages: 153 Localisation: REIMS Projet Actuel: Saint Seiya : La Légende des Chevaliers Avancement:
 | Sujet: Re: Questions de Shikor. Mar 29 Sep - 16:23 | |
| C'est encore moi  D'après vous, est-il possible de faire une animation de déplacement d'un perso avec un seul sprite ? Comme celui-ci par exemple :  Au lieu de faire 4 sprites (face, gauche, droite, dos) mais faire un seul. Puis dans un code de déplacement faire en sorte qu'il affiche en animation par exemple le déplacement de gauche. Donc les sous-images 5,6,7,8 du sprite. |
|
 | |
shadow_the_killer Utilisateur confirmé: Rang ****

Nombre de messages: 1077 Localisation: Québec\Canada Projet Actuel: Chrono Trigger Avancement:
 | Sujet: Re: Questions de Shikor. Mar 29 Sep - 16:42 | |
| j'ai déja essayer sa fonctionne sauf qu'il faut travailler avec image_index pour setter la limite d'affichage _________________ allez voir le Projet d'envergure de la M.R.Sallez voir mon Crono Trigger Il y a du nouveau !!! ------------------------------------------------------------------------ Playstation Network Id Add me: Sasuke-Urushy |
|
 | |
aureol Utilisateur confirmé: Rang *

Nombre de messages: 214 Localisation: le ciel Projet Actuel: record de bugs Avancement:
 | Sujet: Re: Questions de Shikor. Mar 29 Sep - 16:57 | |
| yep, bien sur que tu peut faire une animation avec une planche. Regarde du cote des strips dans ton sprite sur GM. Tu peut le decouper facilement et l'utiliser(un peu comme une tuile en fait.) Allez bon courage _________________ le temp ni fera plus rien, c'est trop tard!
|
|
 | |
|