2010-04-07 11 views
0

Donc, je travaille sur les bases de Actionscript 3; faire des jeux et autres. J'ai conçu un petit espace où tout est basé sur l'emplacement des frontières, en utilisant le mouvement pixel par pixel, etc.Idées pour sauter en 2D avec Actionscript 3 [tentative incluse]

Jusqu'à présent, mon gars peut pousser une boîte autour, et s'arrête en courant dans la frontière, ou quand essayez de pousser la boîte quand c'est contre la frontière. Donc, ensuite, j'ai voulu faire en sorte que lorsque je suis tombé dans l'autre boîte, il a tiré vers l'avant; un petit saut latéral.

J'ai essayé d'utiliser ce (bêtement) au premier:

// When right and left borders collide.  
if((box1.x + box1.width/2) == (box2.x - box2.width/2)) { 

    // Nine times through 
    for (var a:int = 1; a < 10; a++) { 

     // Adds 1, 2, 3, 4, 5, 4, 3, 2, 1. 
     if (a <= 5) { 
      box2.x += a; } 
     else { 
      box2.x += a - (a - 5)*2 } } } 

Bien que, en utilisant ce dans la fonction que j'avais pour le mouvement (contrôle en permanence des touches haut, etc.) fait tout cela à la fois. Où devrais-je commencer à faire un mouvement image par image comme ça? De plus, ce n'est pas réellement des images dans la scène, juste dans le mouvement.

Ceci est un tas massif d'ordures, je m'excuse, mais toute aide serait appréciée.

+0

faites attention au mouvement pixel par pixel. La vitesse apparente dépendra du framerate et vous serez toujours limité à vous assurer de déplacer un pixel à la fois (bien qu'il existe des façons de contourner cela, mais sont un peu douloureuses). Donc, pour un saut, il semble lent et irréaliste. L'alternative au mouvement pixel par pixel, selon le jeu, nécessitera une sorte de détection de collision et de résolution qui peut être trickey. Heureusement, il existe des bibliothèques de physique comme Box2D qui le font pour vous. – Allan

Répondre

0

essayer de faire quelque chose comme: (note ev.target est la case que vous avez attribué l'auditeur)

var boxJumpDistance:Number = 0; 

function jumpBox(ev:Event){ 
    if (boxJumpDistance<= 5) { 
     ev.target.x += boxJumpDistance; } 
    else if(boxJumpDistance<=10){ 
     ev.target.x += boxJumpDistance - (boxJumpDistance - 5)*2 
    } 
    else{ 
     boxJumpDistance = 0; 
     ev.target.removeEventListener(Event.ENTER_FRAME, jumpBox); 
    } 
} 

alors au lieu de courir la boucle, il suffit d'ajouter un écouteur:

box2.addEventListener(Event.ENTER_FRAME, jumpBox); 

Bien que cela ne fonctionne actuellement que pour une seule boîte à la fois (car il n'utilise qu'une variable de suivi pour la vitesse), ce que vous voudriez vraiment faire, c'est avoir cette fonction en interne à la classe box, mais je ne sais pas comment la structure va. l'autre option serait de faire un tableau pour le mouvement des boîtes peut-être? boucle à travers le tableau chaque image. boxesMoveArray[1] >=5 pour la boîte 1, etc.

+0

Comment j'appelle cela exactement? Comme, dans la boucle if imbriquée qui vérifie les collisions du côté droit, comment l'appelerais-je une fois? – Befall

+0

La fonction Event.ENTER_FRAME est appelée une fois par image pour chaque objet avec un écouteur. Pour démarrer la séquence, il suffit d'ajouter la boucle if aux conditions d'ajout de l'écouteur d'événement, puis elle ne démarrera que si elles entrent en collision. (remplacez le code de '// Neuf fois' par l'appel addEventListener()) – longstaff