[TUTO] Créer un jeu avec GameMaker

Pour tout ce qui est fan arts, homebrew, shooters codés à la main, rip de sprites, doujins et toute autre productions artistiques ou logicielles faites maison.
Répondre
Avatar de l’utilisateur
Alec
King Fossile
Messages : 15772
Inscription : 12 juil. 2004, 18:04
Localisation : nstc-j

Gunny a écrit :On peut faire ce qu'on appelle du swap color.
Et il y a plus simple comme système ^^
Ben vas y, balances !!!!
Il y a toujours mieux et toujours plus simple !
ImageImageImage
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Pour le swap color, tu peux le faire à la main ( un sprite "animé" de 2 images ).
Ou utiliser les fonctions intégrées de gamemaker ( mais ca doit bien bouffer côté ressource )

Et ensuite, plutot que de lire l'animation du sprite, tu définis quelle image utiliser, y a une fonction pour ca... Que je regarde dans la doc...

Code : Tout sélectionner

draw_sprite(sprite, subimg, x, y);
Bien entendu, tu mets ca dans l'event draw de ton objet.

Pour ton subimage, tu vas utiliser une variable. Au hasard, "selecteur".

Admettons que tu cycles avec le bouton espace du clavier...

Ca donnerait un code de ce genre :

dans step :

Code : Tout sélectionner

if ( keyboard_check_pressed(vk_space) ) // pour éviter que ca cycle tout seul en maintenant appuyé
{
    if ( selecteur < 4 )
    {
    selecteur+=1;
    }
    else
    {
    selecteur=0;
    }
}
dans draw :

Code : Tout sélectionner

draw_sprite(sprite, selecteur, x, y);
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Avatar de l’utilisateur
psychogore
1 crédit c'est déjà trop
Messages : 2357
Inscription : 23 mai 2003, 09:04

Alec a écrit :J'ai enfin réussi à faire un système de sélection d'arme bien sympa !

tout d'abord faire un sprite de cinq frame numérotées normalement de 0 à 4

créer un objet

dans create:

Code : Tout sélectionner

global.hud=0
image_speed=0;
subimage=0;

dans step :

Code : Tout sélectionner

///petite option, quand on s'approche du hud celui ci devient transparent
if distance_to_object(ogauntlet)<10
image_alpha=0.2;
else
image_alpha=1;
////// ça peut servir



if global.hud=0
{subimage=0;}

if subimage=0
{global.hud=0}



if (keyboard_check(ord('C')))
{image_speed=0.2}

else
image_speed=0;

et enfin dans "animation end"

Code : Tout sélectionner

global.hud= +1


Quand on appuie sur C, l'animation prend la vitesse de 1 mais est bloquée par la variable global.hud,
donc game maker croit que l'animation est teminée et remet sa vitesse à 0 alors qu'on a tout juste passé une frame d'amination sur le sprite (le dessin du deuxième tir par exemple)
De même quand on rappuie sur C, on passe à la troisième frame......puis à la 5ème et quand on rappuie sur C tout se remet à zéro :

global.hud se remet à 0
le sprite se remet à la première frame

quand on laisse appuyé sur C les armes défilent de la première à la dernière en formant une boucle (1,2,3,4,5,1,2,3,4,5 etc....)



Il suffit d'assigner ses tirs sur les variables genre :
global.hud=0...........utiliser tir 1 (illustrée par l'image0 du sprite)
global.hud=1...........utiliser tir 2 (illustrée par l'image1 du sprite)
global.hud=2...........utiliser tir 3 (illustrée par l'image2 du sprite)
global.hud=3...........utiliser tir 4 (etc....)
global.hud=4...........utiliser tir 5 (etc....)



Et ça peut servir aussi à faire un vaisseau qui change d'état (comme dans ikaruga)

Par exemple pour passer du noir au blanc il suffit de faire un sprite en deux frames, une noire et l'autre blanche mais pour un vaisseau c'est pas très malléable (les animations de déplacements sont impossibles ou alors compliquées à mettre en place)
Je suis peut-etre fatigué, mais pourquoi ne pas faire simplement

Code : Tout sélectionner

///petite option, quand on s'approche du hud celui ci devient transparent
if distance_to_object(ogauntlet)<10
image_alpha=0.2;
else
image_alpha=1;
////// ça peut servir


if (keyboard_check(ord('C')))


global.hud=(global.hud+1) mod 5
sprite_index=global.hud 

La fonction "mod" (modulo, une notion mathematique essentielle en programmation soit-dit en passant, qui peut t'epargner un paquet de tests....) permet ici de repasser la valeur à 0 chaque fois qu'on atteint 5. Et vu que les images du sprite selecteur correspondent aux armes utilisées, autant assigner de cette façon, à moins que tu n'ait prevu des anims de transition genre morphing, mais c'est vraiment se prendre le choux...

Pour le color swap il y a l'option "color_blend", j'en ai parlé il y a deja quelques temps, regarde dans les posts precedents.

[edit]
My bad ! Je me rends compte que je l'ai promis, mais que je ne l'ai pas fait ! :P

Allez, pour la peine je ferai un topo ce soir.
Avatar de l’utilisateur
Radigo
Counter Stop
Messages : 7567
Inscription : 22 mai 2003, 17:31
Localisation : Paris
Contact :

Alec a écrit :

Code : Tout sélectionner

time_left = -1;
comme ça ça marche pas non plus..... :X
Alec a écrit :

Code : Tout sélectionner

global.hud= +1
C'est normal que tes incrémentations ne marchent pas car tu fais des assignations de valeurs absolues.

time_left va être égal à -1 et global.hud va être égal à +1 tout simplement car tu te trompes de syntaxe. Je pense que :

time_left -= 1;
et global.hud += 1;

fonctionneront mieux.

J'ai pas tout lu sinon et j'ai pas eu le temps de récupérer le code joystick de Gunny... mais voilà, si ça peut aider vite fait.

En ce moment je me bats avec les parents d'objets, ce semblant d'héritage m'a bien feinté mais je commence à y voir clair.
"HYPER GAGE : 500%"
Image
Avatar de l’utilisateur
psychogore
1 crédit c'est déjà trop
Messages : 2357
Inscription : 23 mai 2003, 09:04

Comment colorer un sprite vite fait

Il suffit, dans l'evenement "Draw" d'utiliser en GML la fonction "draw_sprite_ext".

draw_sprite_ext(sprite,subimg,x,y,xscale,yscale,rot,color,alpha)

Nom du sprite
numero de l'etape d'animation
coordonnées du sprite
Agrandissement (ou reduction) suivant les axes
rotation
la couleur qui nous interesse
la transparence


Pour creer la couleur, le mieux est d'utiliser la fonction "make_color_rgb", qui prend 3 entiers compris entre 0 et 255 en parametres. Ceci permet, entre autre, de creer une couleur à partir d'une variable, par exemple pour faire rougir un boss au fur et à mesure qu'il encaisse des degats.

L'autre application pratique, c'est pour faire un effet à la megaman, avec un perso qui change de couleur en fonction de l'arme qu'il utilise. La restriction etant que vous devrez decomposer le sprite en plusieurs couches partiellement transparentes.
Par exemple, pour megaman, il faudra prevoir une copie du sprite, où les parties qui ne doivent pas changer de couleurs sont devenues transparentes (dans le cas de megaman ça veut dire faire un sprite avec seulement les bottes, les gants et le casque).
Il suffit alors dans l'evenement Draw d'afficher le sprite de base, puis les parties à colorer par dessus, avec la modification de couleur appropriée.

Evidemment, il est alors preferable de concevoir les sprites en nuances de gris.
Avatar de l’utilisateur
Radigo
Counter Stop
Messages : 7567
Inscription : 22 mai 2003, 17:31
Localisation : Paris
Contact :

Si tu as vraiment beaucoup de nuances à implémenter ça peut être avantageux. Mais les ressources prises pour colorer et faire le composite risquent de ralentir le jeu (ça dépend évidemment du nombre de couches que tu poses). Je me suis posé la question et je pense qu'il est préférable de faire 1 sprite par couleur.

Sinon y'a pas moyen de travailler avec la palette directement, à l'ancienne (couleurs indexées, tout ça). Un peu chiant à mettre en place mais niveau poids/perf c'est imbattable.
"HYPER GAGE : 500%"
Image
Avatar de l’utilisateur
psychogore
1 crédit c'est déjà trop
Messages : 2357
Inscription : 23 mai 2003, 09:04

Bah, d'un autre coté, les sprites à qui ont fait changer de couleurs à la volée c'est surtout le personnage joueur. Et pour les ennemis, genre les boss un peu complexes, ils sont souvent en plusieurs sprites, voire en plusieurs objets si on veut gerer des parties destructibles.

En plus, il ne faut pas se leurrer, les fonctions d'affichages suivantes :

Code : Tout sélectionner

draw_sprite(sprite,subimg,x,y) 
draw_sprite_stretched(sprite,subimg,x,y,w,h)
draw_sprite_tiled(sprite,subimg,x,y) 
draw_sprite_part(sprite,subimg,left,top,width,height,x,y) 
draw_sprite_ext(sprite,subimg,x,y,xscale,yscale,rot,color,alpha)
draw_sprite_stretched_ext(sprite,subimg,x,y,w,h,color,alpha)
draw_sprite_tiled_ext(sprite,subimg,x,y,xscale,yscale,color,alpha) 
draw_sprite_part_ext(sprite,subimg,left,top,width,height,x,y,xscale,yscale,color,alpha)
draw_self()
Ne sont que des raccourcis de la fonction suivante :

Code : Tout sélectionner

draw_sprite_general(sprite,subimg,left,top,width,height,x,y,xscale,yscale,rot,c1,c2,c3,c4,alpha)
La difference etant que les fonctions au dessus utilisent certains parametres par defaut.

Donc dire que la recolorisation (qui se resume finalement à faire une operation logique bit à bit sur les couleurs des pixels) prend de la ressource me semble exageré.

Le travail en couleurs indexées aurait pu etre marrant, mais il aurait fallu changer la structure des sprites. Et là encore, il devient preferable de concevoir en nuances de gris.
Avatar de l’utilisateur
Radigo
Counter Stop
Messages : 7567
Inscription : 22 mai 2003, 17:31
Localisation : Paris
Contact :

psychogore a écrit :Donc dire que la recolorisation (qui se resume finalement à faire une operation logique bit à bit sur les couleurs des pixels) prend de la ressource me semble exageré.
Oui, je forçais le trait sur cette opération, mais j'ai cru comprendre que tu avais 1 sprite par couleur à colorer, j'ai sans doute mal compris.

Si par exemple on veut faire clignoter un sprite (quand il se fait toucher par exemple), on peut utiliser une de ces fonctions j'imagine.
"HYPER GAGE : 500%"
Image
Avatar de l’utilisateur
Alec
King Fossile
Messages : 15772
Inscription : 12 juil. 2004, 18:04
Localisation : nstc-j

ce que j'ai fait fonctionne à merveille !

après si vous avez des exemples sous la main, des choses simples je vous en prie, perso j'ai réussi à refaire le système de sélection de thunderforce V :

-on appuies sur une touche le sélecteur change d'arme
-quand on se retrouve sur la dernière (hunter) et qu'on appuie le sélecteur revient à la première....
-quand on laisse appuyé la sélection tourne toute seule (et bien sûr forme une boucle)
-l'arme sélectionnée apparait en vert (les autres restent bleues)

allez y pondez !!!



Oh et l'autre truc que j'ai fait peut servir de timeline (j'ai jamais réussi à utiliser de celles de GM), je vais m'en servir pour mettre en scène un niveau (décor + layout des ennemis), cet espèce de compte à rebours est très efficace, et fonctionne à merveille, et je pense que c'est exactement l'utilisation que je vais en faire !

avec ça je pourrai gérer
-ennemis
-décors
-attaques ennemies
-musiques
Il y a plus simple, c'est vrai ^^



Oh, par contre mon éditeur de sprites déconne, en fait quand je fais copier /coller, la transparence est noire (grosse masse de couleur carrée autour du sprite) c'est grave doc ?
ImageImageImage
Avatar de l’utilisateur
psychogore
1 crédit c'est déjà trop
Messages : 2357
Inscription : 23 mai 2003, 09:04

http://jibransyed.wordpress.com/2013/09 ... -a-target/ <= un tuto complet sur comment gerer une rotation progressive vers une cible, avec une methode plus simple et plus efficace que celle que j'ai proposé.
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

yop yop !
Je laisse pas tomber mon projet de mettre mon tuto en vidéo !
Juste que c'est beaucoup plus dur que prévu ^^

Et que côté motivation... Bah je traverse une période bien creuse...
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
donpasqua
Mou-Stick
Messages : 19
Inscription : 05 avr. 2015, 10:52
Page Facebook : https://www.facebook.com/DonPasqua

est ce que quelqu'un aurait le pdf du tuto ? les liens semblent morts et ça m'interesse fortement ! :aaah:
Avatar de l’utilisateur
Alec
King Fossile
Messages : 15772
Inscription : 12 juil. 2004, 18:04
Localisation : nstc-j

Je vais chercher mais je crois bien qu'il a subi le courroux de la réinstallation !
ImageImageImage
donpasqua
Mou-Stick
Messages : 19
Inscription : 05 avr. 2015, 10:52
Page Facebook : https://www.facebook.com/DonPasqua

merci :mrgreen:
Avatar de l’utilisateur
Alec
King Fossile
Messages : 15772
Inscription : 12 juil. 2004, 18:04
Localisation : nstc-j

Bon, ben pas une trace sur mon pc désolé !
ImageImageImage
Répondre