Se connecter

Informatique

Création de Jeux

Sujet : J'aide les personne dans Game maker
Smooth-Caribou
Niveau 10
01 mai 2016 à 19:06:44

Normalement à l'endroit où tu as "spawn_rate = random_range(60,180);"

Le bout de code est censé le remplacer, à la place de lui dire que la fréquence d'apparition est toujours comprise entre 60 et 180, on lui dit qu'en fonction du score elle sera plus ou moins élevée (= basse dans les chiffres en eux mêmes, vu que le compteur de l'alarme doit être plus bas)

lee-ace
Niveau 4
02 mai 2016 à 03:27:02

:hello: Je tente de config avec ma manette.

Mes animation IDLE ne fonctionne pas :-( Mon perso continu de s'animer sur place.

//Idle Animation
if (!gamepad_axis_value(0,gp_axislh) > 0) && (!gamepad_axis_value(0,gp_axislh) < 0) && (!gamepad_button_check_pressed(0,gp_face1))
    { 
    if (Direction = "Left")
        { sprite_index = spr_castle_idle
        image_xscale = 1
        }
    if (Direction = "Right")
        { sprite_index = spr_castle_idle
        image_xscale = -1
        }
    }

Et lorsque j'attaque avec mon perso, l'animation attaque tourne en boucle, moi je veux qu'il attaque une fois quand j'appuie.

//Attaque
if (gamepad_button_check_pressed(0,gp_face1))
    {
    sprite_index = spr_castle_attack
    image_speed = 0.3
    if (Direction = "Right")
        {image_xscale = -1 } else image_xscale = 1
        }

Merci d'éclairer ma lanterne [[sticker:p/1kkr]]

RoXSaida
Niveau 6
02 mai 2016 à 16:18:11

Un grand merci a toi Smooth-Caribou :)

Smooth-Caribou
Niveau 10
02 mai 2016 à 16:47:34

Je t'en prie RoXSaida, idéalement en bonne pratique vu que dans le même code tu utilises plusieurs fois la même variable globale, je sais qu'il vaudrait mieux la déclarer localement une fois "var score = global.score;" et ensuite utiliser la variable "score" dans le code.

lee-ace, ce qu'il te faut c'est rajouter du code qu'il vérifie où en est l'animation en cours (image_index) vis à vis du nombre total de sous images (image_number).

En indiquant par exemple :

if sprite_index == spr_castle_attack
{
if image_index == image_number
{
sprite_index = spr_castle_idle;
}
}
lee-ace
Niveau 4
02 mai 2016 à 20:48:56

Merci caribou mais j'y arrive pas, j'arrive pas à comprendre comment fonctionne image_index et image number, je sais que image number c'est le nombre de sous image mais image index je comprends pas.
J'ai essayer divers manip sans succès, exemple si image_number = 3 alors change l'animation en idle.
Je suis perdu :fou: et "==" ça veut dire quoi ? J'ai du mal à comprendre la doc parfois.

[[sticker:p/1kks]]
Smooth-Caribou
Niveau 10
02 mai 2016 à 21:59:31

Image_number c'est le nombre total d'images de ton sprite, qui toutes enchainées forment une animation.

Image_index t'indique à quelle image de l'animation tu en es actuellement.

(+ image_speed qui définit la vitesse de lecture des différentes sous images)

Mettons que ton sprite_castle_attack c'est un coup d'épée de haut en bas en 5 images. A image_index = 0 l'épée est en haut, alors qu'à 4 l'épée est en bas. Image_index est alors égal à image_number, vu que ce dernier pour ce sprite aura toujours une valeur de 4 ( soit 5 sous-images vu que ça part à zéro).

Du coup l'idée que je donnais au dessus, c'était de vérifier lorsque ton objet à le sprite d'attaque, que lorsque sa sous-image actuelle (image_index) a atteint la dernière image de l'animation (image_number), alors on lui reassigne le sprite d'origine (et ce test ne s'effectue donc plus).

Tout ça est un peu improvisé de mémoire, et non vérifié, mais normalement ça devrait marcher je pense.

Et sinon le == c'est juste un comparatif qui pourrait s'abréger à = (égal), c'est comme plus grand ou égal >= ou inférieur ou égal <=, là on va dire que c'est "parfaitement" égal ==. Je ne sais même pas si l'on est obligé de mettre ça réellement mais c'est une habitude que j'ai pris. ^^

lee-ace
Niveau 4
03 mai 2016 à 00:24:40

Merci d'avoir pris le temps de m'expliquer je comprends parfaitement maintenant [[sticker:p/1kki]] mais j'y arrive toujours pas [[sticker:p/1kks]] En faite je sais parfaitement ce que je veux faire, c'est à dire si l'animation arrive à l'image 3 (dernière image de l'animation) alors il passe à l'animation idle, mais j'arrive pas à le formuler en gml :-) J'ai essayer pleins de variantes, avec celle-ci ça marche mais il m'affiche pas l'animation attack, il m'affiche directement IDLE.

//Attaque
if (gamepad_button_check_pressed(0,gp_face1))
    {
    sprite_index = spr_castle_attack
    image_speed = 0.4
    if (Direction = "Right") 
        {image_xscale = -1 } else image_xscale = 1
        }
//Idle Animation
if (sprite_index = spr_castle_attack)
    {
     if (image_number = 3)
    {
    sprite_index = spr_castle_idle
    }
}

Ps : castle_attack c'est le sprite de castlevania sur nes qui fait un coup de fouet ^^ :banzai:

RoXSaida
Niveau 6
03 mai 2016 à 05:48:05

Bonjour oui c'est encore moi désolée ^^ j'ai juste un dernier problème j'essaye de faire spawn un boss arrivée a un certain nombre de score alors voila ce que j'ai fais :

if global.var1 < 80
{
spawn_rate = random_range(40,50);
}

else if global.var1 >= 80 && global.score < 200
{
spawn_rate = random_range(10,20);
}

else
{
spawn_rate = random_range(5,10);
instance_create(random_range(0,view_wview),random_range(0,view_hview),obj_boss);

}

alarm[0] = spawn_rate;

Malheureusement sa ne fait rien le boss n’apparaît pas :(

Smooth-Caribou
Niveau 10
03 mai 2016 à 10:33:40

Là comme ça je ne vois pas RoX même si ça ne doit pas être grand chose.

Par contre lee-ace, non tu n'as pas parfaitement compris ^^ vu que dans ton bout de code tu a écrit "if (image_number = 3) "

En gros traduit en FR toute cette partie là tu lui dis "si tu as le sprite castle_attack, alors tu vérifies le nombre d'images de l'animation. Si cette animation comporte 3 images en tout, alors on lui assigne le sprite idle". Bref ça met le sprite d'attaque mais ça le rechange immédiatement, vu que le "image_number" sera toujours égal à 3.

Essaie juste de remplacer image_number par image_index.

chopsueys
Niveau 16
03 mai 2016 à 12:01:24

Essaie juste de remplacer image_number par image_index.

Même comme ça, ça ne fonctionnera pas par ce que image_index ne sera jamais = à 3 puisque 3 n'est pas un multiple de 0,4

Déclare dans l'event create une variable qui s’appellera par exemple tour=0
Dans l'event step:

if (sprite_index = spr_castle_attack)
{
if image_index==0.4 {tour+=1}
if tour==2
{sprite_index=spr_castle_idle}

RoXSaida

Déjà "else if global.var1 >= 80"
Le else est en trop.

Que contient l'alarme 0 ?
spawn_rate te sert à calculer un temps d'attente pour faire apparaitre le boss ?
As tu essayé le debug mode pour tester tes variables ?
Essaye d'expliquer précisément ce que tu essayes de faire.

RoXSaida
Niveau 6
03 mai 2016 à 15:07:00

En gros j'ai mis sa dans mon object spawn enemies et donc je suis partie dans create et en dessous de si le score et supérieure ou égale a 200 instance_create(random_range(0,view_wview),random_range(0,view_hview),obj_boss);
sauf que cela ne fait pas apparaître le boss

chopsueys
Niveau 16
03 mai 2016 à 15:12:40

Essaye d'expliquer précisément ce que tu essayes de faire.

Je ne comprend pas exactement ce que tu essayes de faire.
Si tu me l'explique je peux te proposer un autre algorithme.
Détail point par point de la façon la plus précise ce que tu cherche à faire.

RoXSaida
Niveau 6
03 mai 2016 à 16:28:25

AH désolée je croyais que tu répondais a quelqu'un d'autre alors je m'explique, dans l'alarm[0] il y a instance_create(random_range(0,view_wview),random_range(0,view_hview),obj_enemies);
alarm [0] = spawn_rate;

donc qui sert a faire apparaître les ennemies quand on tue ces enemies on gagne 10 points et moi dans mon code plus j'ai de point plus j'augmente la fréquence d'apparitions de l’ennemie alors j'ai voulu que arrivais a un certain nombre de point par exemple 200 qu'un autre ennemie apparaisse (un boss) alors en dessous de ma conditions qui disais que si j'arrive a 200 j'augmente la fréquence d'apparitions de l’ennemie j'ai mis instance_create(random_range(0,view_wview),random_range(0,view_hview),obj_boss); pour faire apparaître le boss mais le boss ne spawn pas :(

chopsueys
Niveau 16
03 mai 2016 à 17:33:35

Essaye ça:

event create:

alarm_ok=1

event step:

if global.Score<80
{spawn_rate = random_range(40,50);}

if global.Score>=80
{spawn_rate = random_range(10,20);}

if global.Score>=200
{spawn_rate = random_range(5,10);
if ! instance_exists(obj_boss)
{instance_create(random_range(0,view_wview),random_range(0,view_hview),obj_boss);}
}

if alarm_ok==1{
alarm[0] = spawn_rate;
alarm_ok=0
}

alarm 0:

alarm_ok=1
instance_create(random_range(0,view_wview),random_range(0,view_hview),obj_enemies);

RoXSaida
Niveau 6
03 mai 2016 à 17:45:36

https://www.noelshack.com/2016-18-1462290297-bandicam-2016-05-03-19-43-10-529.jpg https://www.noelshack.com/2016-18-1462290308-bandicam-2016-05-03-19-43-38-563.jpg https://www.noelshack.com/2016-18-1462290317-bandicam-2016-05-03-19-43-47-368.jpg https://www.noelshack.com/2016-18-1462290326-bandicam-2016-05-03-19-43-51-858.jpg

En gros je doit me retrouver avec sa ?

chopsueys
Niveau 16
03 mai 2016 à 17:50:24

Non juste mon code, comme je te l'ai marqué.
Je comprend même pas les screen que tu me montres par ce que je ne sais pas où tu les as placé.

RoXSaida
Niveau 6
03 mai 2016 à 17:59:12

je doit les mettre dans un nouvel objet ?

chopsueys
Niveau 16
03 mai 2016 à 18:02:44

Ben si tu veux mais disons que ça fait office d'objet générateur de mobs, comme ce que tu m'a montré mais qui ne fonctionnait pas.

RoXSaida
Niveau 6
03 mai 2016 à 18:12:54

Alors effectivement sa fonctionne mais il ne fais pas spawn qu'un boss mais des milliers xD

chopsueys
Niveau 16
03 mai 2016 à 18:17:19

Impossible avec cette condition "if ! instance_exists(obj_boss)"
T"as du te planter quelque pars, j'ai essayé et ça fonctionne

Sujet : J'aide les personne dans Game maker
   Retour haut de page
Consulter la version web de cette page