Forums Développement Multimédia

Aller au contenu

Remake Street Fighter

CODE

23 réponses à ce sujet

#1 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 16 December 2009 - 21:56 PM

Salut à tous,

Donc j'ai commencé dimanche un petit remake de Street Fighter II qui avance tranquillement. Je posterais au fûr et à mesure les sources du jeu (la partie code ne sera vraiment pas un exemple de propreté et des meilleurs méthodes à utiliser, mais au niveau du principe cela peut en inspirer certains). Et là, pour aujourd'hui, je poste donc une vidéo (la vidéo n'est pas de trés bonne qualité niveau image et fluidité, le .swf est beaucoup plus fluide est beau):

Vidéo du projet en cours

#2 thot

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPip
  • 331 messages

Posté 16 December 2009 - 23:32 PM

Bravo beau boulot.

Ce qui m'intéresse c'est de savoir comment tu gères tes collisions et aussi ou tu récupères les animations des personnages.

#3 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 17 December 2009 - 14:56 PM

Pour les animations c'est simple, ce sont des Sprites. Pour ceux-ci, je les ais récupérés ici: Sprites SF II

Et pour les collisions j'utilise de simple Hitbox, en clair, différents clips correspondant à la zone de frappe des jambes et du corps (pour subir les coups), et pour les donner j'utilise une Hitbox au niveau des mains ou pieds au moment de l'animation du coup correspondant.

#4 thot

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPip
  • 331 messages

Posté 17 December 2009 - 23:34 PM

Voir le messageUthor le cruel, le 17 December 2009 - 14:56 PM, dit :

Pour les animations c'est simple, ce sont des Sprites. Pour ceux-ci, je les ais récupérés ici: Sprites SF II

Et pour les collisions j'utilise de simple Hitbox, en clair, différents clips correspondant à la zone de frappe des jambes et du corps (pour subir les coups), et pour les donner j'utilise une Hitbox au niveau des mains ou pieds au moment de l'animation du coup correspondant.


Ok je ne connaissais pas ce site de ressources ( même si après un petit coup de google je me suis rendu compte que c'était apparemment le plus connu O_O ).

Ok pour la hitbox c'est bien ce que je pensais, en tout cas le rendu est impeccable ;) bravo.
A quand le menu de sélection de personnage ( j'ai hâte de jouer avec chun-li et honda ^^ ).

#5 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 18 December 2009 - 12:07 PM

Je verrais plus tard pour surement développez une fonction online au jeu (pour faire des versus). Si jamais je venais à m'y mettre, je ne pense pas le faire seul, donc voilà si certains se sentirais le moment venu tenté par cette idée ils peuvent me le faire savoir... :mrgreen:

#6 Leonerep

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3562 messages

Posté 18 December 2009 - 12:17 PM

Salut,
Peut être devrais tu travailler dans le pixel pour ce genre de projet non ?
rendu sur un unique bitmapData, calcul des collisions au pixel, tu gagnerais d'ailleurs en ressource ^___^; indispensbale pour ce genre de jeu.

#7 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 18 December 2009 - 12:33 PM

Leonerep, je vais étudier ça mais le risque c'est que les collisions deviennent beaucoup trop sensibles (je précise que je code en AS2).

Et à savoir que pour ceux qui possède comme moi une manette pour pc, le jeu sera beaucoup plus agréable à jouer et les combos plus faciles à executer.

Je verrais plus tard pour surement développez une fonction online au jeu (pour faire des versus). Si jamais je venais à m'y mettre, je ne pense pas le faire seul, donc voilà si certains se sentirais le moment venu tenté par cette idée ils peuvent me le faire savoir... :mrgreen:

Modifié par Uthor le cruel, 18 December 2009 - 12:34 PM.


#8 Leonerep

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3562 messages

Posté 18 December 2009 - 14:57 PM

Citation

je précise que je code en AS2).
ha effectivement si tu te rajoute des difficulté ^3^;
mais sinon, ce ne sera plus ni moins précis, c'est une question de réglage comme toujours : évidement le sprite ne correpond pas aux zones de hit, que tu peut toujours basé sur les hitbox même si je conseil pas car c'est pérrave niveau ressource...

Citation

voilà si certains se sentirais le moment venu tenté par cette idée ils peuvent me le faire savoir
au pire le forum sera toujours la pour te refiler un coup de main ^3^/

#9 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 18 December 2009 - 16:09 PM

Citation

ha effectivement si tu te rajoute des difficulté ^3^;
Ah, ils ne sont plus trés nombreux les amoureux de l'AS2 (le tout en rime attention!). Non, en fait je crois que c'est surtout par flemme et manque de temps que je ne met pas à l'AS3, mais je finirais bien par m'y résoudre^^

#10 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7012 messages

Posté 18 December 2009 - 16:57 PM

Je suis un peu comme çà aussi, je trouvais que le temps que je passais à me former à l'AS3 était autant de temps de perdu que je ne passais pas à bosser sur mes jeux. En fait maintenant je serais plutôt de l'avis de Leonerep, non pas que je soit devenu un king de l'AS3 en deux semaines mais je remarque quand même que certaines choses sont bien plus aisées à mettre en place, du coup c'est pas tant que çà du temps perdu en fait ;-)

#11 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 18 December 2009 - 17:03 PM

Alors si même M.Spi me le conseille je vais donc m'y mettre (doucement), mais m'y mettre quand même.

#12 lazrie

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 242 messages

Posté 19 December 2009 - 18:34 PM

Bonsoir :),

Je sais pas si tu connais, mais si tu veux t'y mettre (ou te faire une idée), il y a une pdf en libre téléchargement de Thibault Imbert:

pdf AS3

#13 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 19 December 2009 - 19:29 PM

T'inquiète, je savais déja. Je m'y suis mis... ;-)

#14 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 20 December 2009 - 18:36 PM

Salut, j'apporte des nouvelles!
Donc j'ai commencé à faire transiter le jeu vers l'AS3, je dois dire aussi que le livre de Thibault Imbert est excellent! Par contre j'ai l'impression que mon animation tourne plus difficilement en AS3 qu'en AS2 (ce qui bien évidemment n'est pas normal). Est-ce que l'un d'entre vous verrais dans ces quelques lignes des erreurs qui pourraient provoquer maintenant ou plus tard des problèmes de ralentissements ou autres?

//definitions des variables
var timer1:int = 10;
var combo1:String = "";
var vitesse1:Number = 4;
var x1:int =0;
var y1:int =0;
var y2:int =400;
var x2:int=0;
var x3:int=550;
var y3:int=0;
stage.focus = this;
var droite:Boolean=false;
var gauche:Boolean=false;
//

//Moteur principal du jeu (gre les sorties, les victoires, les vies etc etc...)
addEventListener (Event.ENTER_FRAME,moteur);
function moteur (event:Event):void {
        if (hero1.x > 550) {
                hero1.x=550;
        } else if (hero1.x < 0) {
                hero1.x=0;
        }
}
//


//trace les lignes servant au reprages dans l'espaces (non prsentes dans le swf final)+affiche la version du jeu:
var version:TextField=new TextField();
addChild (version);
version.text="v 1.0 AS3"
version.x=5
version.y=375

var effect:MovieClip=new MovieClip();
addChild (effect);
var Contligne:MovieClip=new MovieClip();
addChild (Contligne);

for (var a:int=1; a<13; a++) {
        var trait:MovieClip=new MovieClip();
        trait.name ="vligne"+a;//attribution du nom
        Contligne.addChild (trait);
        trait.graphics.lineStyle (1, 0xCCCCCC, .1);
        trait.graphics.moveTo (x1, y1);
        trait.graphics.lineTo (x1, y2);
        x1+=50;
}

for (var b:int=13; b<22; b++) {
        var traith:MovieClip=new MovieClip();
        traith.name ="hligne"+b;//attribution du nom
        Contligne.addChild (traith);
        traith.graphics.lineStyle (1, 0xCCCCCC, .1);
        traith.graphics.moveTo (x2, y3);
        traith.graphics.lineTo (x3, y3);
        y3+=50;
}
//

this.addEventListener (KeyboardEvent.KEY_DOWN, toucheDown);
this.addEventListener (KeyboardEvent.KEY_UP, toucheUp);
this.addEventListener (Event.ENTER_FRAME, perso_moteur);

//Commandes du personnage:
function perso_moteur (evt:Event) {
        if(hero1.currentFrame<14){
        if (droite==true) {
                hero1.gotoAndPlay("marcheD")
        }else if (gauche==true) {
                hero1.gotoAndPlay("marcheG")
        }
        }
        if((hero1.currentFrame>14) && (hero1.currentFrame<46)){
        if (droite==true) {
                hero1.x+=vitesse1;
        }else if (gauche==true) {
                hero1.x-=vitesse1;
        }else{
                hero1.gotoAndPlay(1);
        }
        }
}
///fin des commandes du personnage///

//traduction des touches
function toucheDown (evt:KeyboardEvent) {
        if (evt.keyCode == 37) {
                gauche=true
        }
        if (evt.keyCode == 39) {
                droite=true
        }
}
function toucheUp (evt:KeyboardEvent) {
        if (evt.keyCode == 37) {
                gauche=false
        }
        if (evt.keyCode == 39) {
                droite=false
        }
}
//

Je joins avec le swf...

Modifié par Uthor le cruel, 20 December 2009 - 18:38 PM.


#15 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 20 December 2009 - 18:40 PM

...Désolé, voici le swf!

Et j'ai aussi remarqué que lorsque l'on quitté la fenêtre du swf et qu'on y revenais, d'un seul coup, la marche ne fonctionnait plus...(Flèches droite et gauche) Je n'arrive pas à savoir pourquoi, si l'un de vous le sais je suis preneur :neutral:.

Fichier(s) joint(s)


Modifié par Uthor le cruel, 20 December 2009 - 18:44 PM.


#16 lazrie

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 242 messages

Posté 20 December 2009 - 19:21 PM

Salut:),

Bein pour les touches, je sais pas si c'est ça ; mais en remplaçant les "this" des "addEventListener" par "stage". Est-ce que ça change quelques choses?


stage.addEventListener (KeyboardEvent.KEY_DOWN, toucheDown);
stage.addEventListener (KeyboardEvent.KEY_UP, toucheUp);
stage.addEventListener (Event.ENTER_FRAME, perso_moteur);
 


#17 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 20 December 2009 - 21:14 PM

Merci beaucoup Full, effectivement le problème est réglé.

#18 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 21 December 2009 - 17:57 PM

Voilà que je rencontre un autre problème sur lequel je butte depuis plusieurs heures. Avec ma mise en place du code pour l'interactivité du personnage par rapport aux touches du clavier appuyées je rencontre un problème: Lorsque j'appuis sur plusieurs touches en même temps (par exemple: Flèche droite+A+M) le personnage se met à executer en boucle l'action associer à la touche Flèche droite (à savoir, avancer vers la droite):

var droite:Boolean=false;
var gauche:Boolean=false;

stage.addEventListener (KeyboardEvent.KEY_DOWN, toucheDown);
stage.addEventListener (KeyboardEvent.KEY_UP, toucheUp);

//Commandes du personnage:
function perso_moteur (evt:Event) {
        if (hero1.currentFrame<14) {
                if (droite==true) {
                        hero1.gotoAndPlay ("marcheD");
                } else if (gauche==true) {
                        hero1.gotoAndPlay ("marcheG");
                }
        }
        if ((hero1.currentFrame>14) && (hero1.currentFrame<46)) {
                if (droite==true) {
                        hero1.x+=vitesse1;
                } else if (gauche==true) {
                        hero1.x-=vitesse1;
                } else {
                        hero1.gotoAndPlay (1);
                }
        }
}
///fin des commandes du personnage///

//traduction des touches
function toucheDown (evt:KeyboardEvent) {
        if (evt.keyCode == 37) {
                gauche=true;
        }else{
                gauche=false;
        }
        if (evt.keyCode == 39) {
                droite=true;
        }else{
                droite=false;
        }
}
function toucheUp (evt:KeyboardEvent) {
        if (evt.keyCode == 37) {
                gauche=false;
        }
        if (evt.keyCode == 39) {
                droite=false;
        }
}
//


#19 bricoqe

  • Members
  • PipPipPipPipPipPipPipPip
  • 761 messages

Posté 21 December 2009 - 19:10 PM

Dans le code que tu nous montre tu ne vérifie pas si une autre touche est appuyée au moment du keyDown donc ça semble normal, mais ça vient peut être de la partie 'else{ gauche=false; }' par exemple qui annule la pression sur gauche si on appuit sur une autre touche même si gauche est enfoncée.

Ce serait pas mieux avec un tableau ou vecteur qui stocke les touches enfoncées au lieu de créer des variables gauche, droite etc ?
Il ferait autant d'index que de doigts au maximum, donc rapide à lire, et avec une petite méthode isDown(code:uint):Boolean pour vérifier. :cool:

#20 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 21 December 2009 - 19:24 PM

Je veux bien faire comme ça. L'un de vous aurais un exemple à petit échelle de ce genre de tableau pour le stockage et l'interpretation des données (j'ai déja mon idée mais je ne suis pas sûr du tout que cela soit la meilleure méthode)?

#21 bricoqe

  • Members
  • PipPipPipPipPipPipPipPip
  • 761 messages

Posté 21 December 2009 - 23:24 PM

Quelque chose comme ça :


var downKeys:Array = [];

stage.addEventListener (KeyboardEvent.KEY_DOWN, toucheDown);
stage.addEventListener (KeyboardEvent.KEY_UP, toucheUp);

function toucheDown (evt:KeyboardEvent):void
{
    pushKey(evt.keyCode);
                               
    // ...
}

function toucheUp (evt:KeyboardEvent):void
{                              
    popKey(evt.keyCode);                               
                               
    // ...
}


function isDown(code:uint):Boolean
{
    if (downKeys.indexOf(code) >= 0) return true;
    return false;
}

function pushKey(code:uint):void
{
    if (!isDown(code)) downKeys.push(code);
}

function popKey(code:uint):void
{
    var i:int = downKeys.indexOf(code);
    if (i >= 0) downKeys.splice(i , 1);
}
 

Il y des combinaisons qui ne passent pas avant le up, comme CTRL + A etc

#22 remidebra

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 282 messages

Posté 22 December 2009 - 11:57 AM

Je dois avouer ne pas bien comprendre ton code. Où dois je insérer les conditions d'interpretation des touches, et que fait précisemment la fontction popKey?

#23 lazrie

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 242 messages

Posté 22 December 2009 - 18:17 PM

Bonsoir :),

Il y a une chose qui va peut être t'intéresser :

PixelBlitz

La dernière version inclut une gestion du clavier et de la souris. Je sais pas si ça peut te convenir?

Bonne soirée,

#24 bricoqe

  • Members
  • PipPipPipPipPipPipPipPip
  • 761 messages

Posté 22 December 2009 - 19:00 PM

Voir le messageUthor le cruel, le 22 December 2009 - 11:57 AM, dit :

Je dois avouer ne pas bien comprendre ton code. Où dois je insérer les conditions d'interpretation des touches, et que fait précisemment la fontction popKey?
Dans toucheDown et toucheUp comme précédemment. La fonction popKey supprime le code de la touche relâchée du tableau, mais j'ai pas testé avec les touches doublées (maj,ctrl etc) ce que ça peut donner... :texas:
Il y a peut-être mieux, il faut voir ça en pratique après bien sûr, mais ça me semble en tout cas plus approprié qu'un booléen pour chaque touche utilisée. :)



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)