Forum Le CBNA

Le Forum du CBNA a pour but de vous aider dans l'utilisation de GameMaker. Premier forum Francophone sous GameMaker, vous trouverez des .gmd, .gm6, .gmk, scripts, logiciels et d'autres ressources sur Le CBNA.
 
AccueilAccueil  ­FAQFAQ  ­RechercherRechercher  ­S'enregistrerS'enregistrer  ­MembresMembres  ­ConnexionConnexion  
Poster un nouveau sujet   Répondre au sujetPartager | 
 

 Questions de Shikor.

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7  Suivant
AuteurMessage
shikor
Très bonne participation


Nombre de messages: 153
Localisation: REIMS
Projet Actuel: Saint Seiya : La Légende des Chevaliers
Avancement:
0 / 1000 / 100


MessageSujet: 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 super
Revenir en haut Aller en bas
Sekigo Le Magnifique
Utilisateur confirmé: Rang ***


Nombre de messages: 722
Avancement:
0 / 1000 / 100


MessageSujet: 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.)
Revenir en haut Aller en bas
shikor
Très bonne participation


Nombre de messages: 153
Localisation: REIMS
Projet Actuel: Saint Seiya : La Légende des Chevaliers
Avancement:
0 / 1000 / 100


MessageSujet: 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
Revenir en haut Aller en bas
Sekigo Le Magnifique
Utilisateur confirmé: Rang ***


Nombre de messages: 722
Avancement:
0 / 1000 / 100


MessageSujet: 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.)
Revenir en haut Aller en bas
shikor
Très bonne participation


Nombre de messages: 153
Localisation: REIMS
Projet Actuel: Saint Seiya : La Légende des Chevaliers
Avancement:
0 / 1000 / 100


MessageSujet: 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 snif2

Je vais essayé d'y remédier, si vous avez une idée. N'hésitez pas gnii
Revenir en haut Aller en bas
shikor
Très bonne participation


Nombre de messages: 153
Localisation: REIMS
Projet Actuel: Saint Seiya : La Légende des Chevaliers
Avancement:
0 / 1000 / 100


MessageSujet: Re: Questions de Shikor.   Ven 25 Sep - 17:40

Ca y est j'ai trouvé !!!!!! gnii gnii gnii gnii

Voilà j'ai mis dans Create de objet "héros"
Code:
image_speed = 0.2
global.vue = 0


Puis dans Draw :
Code:
if keyboard_key = 0
    global.vue = 0
   
if keyboard_check(vk_left)
{  sprite_index = heros_gauche;
    global.vue = -1;}

if keyboard_check(vk_right)
{  sprite_index = heros_droite;
    global.vue = -1;}

if keyboard_check(vk_down)
{  sprite_index = heros_face;
    global.vue = -1;}

if keyboard_check(vk_up)
{  sprite_index = heros_dos;
    global.vue = -1;}

draw_sprite (sprite_index,global.vue,x,y)


Et mon problème est résolu !!!!!!!!!!!!!!!! super super super

Merci à vous tous, notamment Sekigo.
Revenir en haut Aller en bas
Playboy
Utilisateur confirmé: Rang ***


Nombre de messages: 636
Localisation: Sur la lune
Projet Actuel: Sur le pont du Charles de Playboy
Avancement:
5 / 1005 / 100


MessageSujet: 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]
Revenir en haut Aller en bas
shikor
Très bonne participation


Nombre de messages: 153
Localisation: REIMS
Projet Actuel: Saint Seiya : La Légende des Chevaliers
Avancement:
0 / 1000 / 100


MessageSujet: Re: Questions de Shikor.   Ven 25 Sep - 18:36

super merci Playboy super

Je trouve que le GML est beaucoup mieux que le D&D mais il faut bien le comprendre rire

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 ?
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang ****


Nombre de messages: 987
Localisation: Sur le forum du CBNA...ou pas
Projet Actuel: Terminator Begins
Avancement:
10 / 10010 / 100


MessageSujet: Re: Questions de Shikor.   Ven 25 Sep - 18:45

Un conseil aussi : si tu veux faire plein de téléportations, commence a faire un repérage de (x;y), plutôt que de te retrouver avec 1000 obj téleportation_nx Wink

_________________
Revenir en haut Aller en bas
http://worldgamescenter.over-blog.com/
Sekigo Le Magnifique
Utilisateur confirmé: Rang ***


Nombre de messages: 722
Avancement:
0 / 1000 / 100


MessageSujet: 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.)
Revenir en haut Aller en bas
shikor
Très bonne participation


Nombre de messages: 153
Localisation: REIMS
Projet Actuel: Saint Seiya : La Légende des Chevaliers
Avancement:
0 / 1000 / 100


MessageSujet: 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.

EDIT


Dans 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 ????
Revenir en haut Aller en bas
Wargamer
*Excellent utilisateur*


Nombre de messages: 4318
Localisation: qui s'y interesse?>>
Projet Actuel: Bataille de cake au fruits
Avancement:
10 / 10010 / 100


MessageSujet: 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 clinoeuil

_________________
Je suis un dans le GM Quiz!

Spoiler:
 
Revenir en haut Aller en bas
shikor
Très bonne participation


Nombre de messages: 153
Localisation: REIMS
Projet Actuel: Saint Seiya : La Légende des Chevaliers
Avancement:
0 / 1000 / 100


MessageSujet: 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..... snif2 snif2 snif2

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 ?
Revenir en haut Aller en bas
Wargamer
*Excellent utilisateur*


Nombre de messages: 4318
Localisation: qui s'y interesse?>>
Projet Actuel: Bataille de cake au fruits
Avancement:
10 / 10010 / 100


MessageSujet: 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:
 
Revenir en haut Aller en bas
shikor
Très bonne participation


Nombre de messages: 153
Localisation: REIMS
Projet Actuel: Saint Seiya : La Légende des Chevaliers
Avancement:
0 / 1000 / 100


MessageSujet: 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 gnii )
Revenir en haut Aller en bas
Playboy
Utilisateur confirmé: Rang ***


Nombre de messages: 636
Localisation: Sur la lune
Projet Actuel: Sur le pont du Charles de Playboy
Avancement:
5 / 1005 / 100


MessageSujet: Re: Questions de Shikor.   Mar 29 Sep - 13:29

Alors je vais pas essayer de corriger le système de Wargammer Smile Il va marcher après les corrections mais je vais donner une autre voie pour faire ce que tu veux Smile 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 :
Code:
teleportation=0


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 Smile Ce code par contre ne marche que pour des téléportation intraroom Smile Sinon tu dois spécifier pour chaque room chaque obj de téléportation Smile

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 Smile

_________________
[Démo du RPG (30 Juin 2009) = Aeris] ------------------ [Jeux Finis/Mon topic = Laguna]
Revenir en haut Aller en bas
shikor
Très bonne participation


Nombre de messages: 153
Localisation: REIMS
Projet Actuel: Saint Seiya : La Légende des Chevaliers
Avancement:
0 / 1000 / 100


MessageSujet: 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 !!!! happy1 happy1 happy1 happy1 happy1

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 clinoeuil

Je pense que je dois m'entrainer sur la syntaxe des fonctions.
Revenir en haut Aller en bas
shikor
Très bonne participation


Nombre de messages: 153
Localisation: REIMS
Projet Actuel: Saint Seiya : La Légende des Chevaliers
Avancement:
0 / 1000 / 100


MessageSujet: Re: Questions de Shikor.   Mar 29 Sep - 16:23

C'est encore moi rire2

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.
Revenir en haut Aller en bas
shadow_the_killer
Utilisateur confirmé: Rang ****


Nombre de messages: 1077
Localisation: Québec\Canada
Projet Actuel: Chrono Trigger
Avancement:
6 / 1006 / 100


MessageSujet: 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.S
allez voir mon Crono Trigger Il y a du nouveau !!!
------------------------------------------------------------------------
Playstation Network Id Add me: Sasuke-Urushy
Revenir en haut Aller en bas
http://megantic-rpg-studio.xooit.com/index.php
aureol
Utilisateur confirmé: Rang *


Nombre de messages: 214
Localisation: le ciel
Projet Actuel: record de bugs
Avancement:
80 / 10080 / 100


MessageSujet: 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!
Revenir en haut Aller en bas
 

Questions de Shikor.

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 2 sur 7Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7  Suivant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Programmation :: Aide débutants-
Poster un nouveau sujet   Répondre au sujet