2011-11-27 4 views
1

J'ai des devoirs pour mes cours de programmation. Ma tâche est de créer un jeu de tir ballon. J'ai fait tout sur mon chemin, les ballons sont en train de naître, les contre-travaux. Mais je ne peux pas les faire bouger vers le haut, je sais comment bouger = y ++. C'est mon problème, je ne peux pas savoir où et comment. Code ci-dessous:Action Script 3 déplacer des objets par x, y

import flash.events.MouseEvent; 
import flash.events.Event; 
var c = 0; 
circle.addEventListener(MouseEvent.MOUSE_DOWN, handlerMouseDown); 
circle.addEventListener(MouseEvent.MOUSE_UP, handlerMouseUp); 
function handlerMouseDown(event:MouseEvent):void{ 
    circle.startDrag(); 
} 

function handlerMouseUp(event:MouseEvent):void{ 
    circle.stopDrag(); 
    var i:int; 
    for (i=numChildren-1;i>=0;i--) 
     if (getChildAt(i) is MyRectangle){ 
      if (circle.hitTestObject(getChildAt(i))){ 
       removeChildAt(i); 
       c++; 
       score.text =c; 
      } 
     } 
} 

var moveUp:Boolean = true; 
var b:Boolean = false; 
var t1 = 1000; 
var t2 = 1002; 
var myTimer:Timer = new Timer(t1); 
myTimer.addEventListener(TimerEvent.TIMER, runMany); 
myTimer.start(); 

function runMany(event:TimerEvent):void { 
    b = true; 
    t1+=50; 
} 

var myTimer2:Timer = new Timer(t2); 
myTimer2.addEventListener(TimerEvent.TIMER, runMany2); 
myTimer2.start(); 

function runMany2(event:TimerEvent):void { 
    b = false; 
    t2 -=50; 
} 

addEventListener(Event.ENTER_FRAME, handlerEnterFrame); 
function handlerEnterFrame(event:Event):void{ 
var rect:MyRectangle = new MyRectangle(); 

addChildAt(rect,0); 
if(b){ 
    rect.x = int(Math.random()*width); 
    rect.y = int(Math.random()*height) 
    } 
} 

circle.addEventListener(Event.ENTER_FRAME, handlerEnterFrame2); 
function handlerEnterFrame2(event:Event):void{ 
    Mouse.hide(); 
    circle.startDrag(true); 
} 
+0

Vous avez besoin d'un tableau contenant tous vos ballons, de sorte que vous pouvez appliquer des changements dans chacune de leurs propriétés y, de sorte qu'ils semblent flotter vers le haut. Vous avez besoin d'un tableau pour que tous les ballons puissent flotter vers le haut en même temps. – Alex

+0

Vos gestionnaires ENTER_FRAME ne sont pas à leur place. Le premier engendre MyRectangle à l'écran. La deuxième commence à glisser. Ce n'est normalement pas fait à chaque image. Apparition de l'objet en fonction de certaines conditions (par exemple, le dernier ballon a sauté) et faites glisser lorsque le bouton gauche de la souris est enfoncé. Le gestionnaire EnterFrame est pour la mise à jour des coordonnées. – alxx

+0

Ouais je l'ai trouvé aussi, corrigé. ok je l'ai fait, juste comme AlexW a dit - je les ai mis en rangée et puis pour chaque mouvement. Thx – Raimonds

Répondre

0

Un problème que je vois de votre description est que vous avez mal vos coordonnées. Le coin supérieur gauche de l'écran est (0,0), et si vous utilisez y++, l'objet se déplacera vers le bas plutôt que vers le haut. y-- va le déplacer vers le haut ... mais lentement.

La deuxième chose est, vous devez faire une sorte de cycle de mise à jour. Votre classe Balloon doit avoir une fonction update(), appelée chaque image pour chaque bulle. Dans la fonction de mise à jour des ballons est l'endroit où vous voulez mettre y-- (ou quelque chose d'autre pour modifier sa position). Vous pouvez également faire une détection de collision là-bas, une fois que vous y êtes arrivé. Vous voudrez mettre tous les ballons (et tout le reste qui change au fil du temps) dans un tableau, et chaque trame appelle update() sur chaque élément du tableau avec une boucle for. Chaque fois que vous ajoutez quelque chose à la scène, il doit également être ajouté au tableau d'objets mis à jour chaque image.

+1

Qu'est-il arrivé à une classe de ballon avec des écouteurs d'événements et des méthodes à l'intérieur de la classe de ballon? AS3 est un langage OOP, ne pas encourager les habitudes comme tout mettre dans une seule classe. – apscience

+0

C'est un très bon point. Modification pour ajouter ceci ^. –

Questions connexes