Je suis un débutant avec AS3 et j'essaie de faire un jeu de base joueur vs CPU pong (en utilisant un tutoriel comme référence). Je m'excuse si cela semble stupide ou évident. J'ai une classe de document et des classes individuelles pour Ball, Player et CPU. Mon problème est que je ne sais pas comment faire en classe CPU utiliser les coordonnées de la boule de clip sur la scène afin qu'il puisse se déplacer par rapport à la balle comme nécessaire pour former l'IA. Le tutoriel auquel j'ai fait référence a tout le code pour la balle, le joueur et le cpu dans la classe document seulement mais j'ai écrit du code pour tout dans leurs classes respectives.Pong: Comment passer la position de la balle sur la scène à la pagaie du CPU? -AS3
Le lien tutoriel http://as3gametuts.com/2011/03/19/pong-1/
Ma version de code. Actuellement, le ballon rebondit sur les murs mais HitTest n'a été appliqué à rien. La palette du joueur se déplace avec les touches fléchées. Aucun avertissement ou erreur n'est affiché.
principal
public class Main extends MovieClip
{
public function Main()
{
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
trace("Initialized");
}
}
balle
public class Ball extends MovieClip
{
public var ballSpeedX:int = 5;
public var ballSpeedY:int = 6;
public function Ball()
{
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage)
}
public function onAddedToStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage)
this.x = stage.stageWidth/2;
this.y = stage.stageHeight/2;
this.addEventListener(Event.ENTER_FRAME, loop)
}
public function loop(e:Event):void
{
this.y += ballSpeedY;
this.x += ballSpeedX;
if ((this.y <= 0 + this.height/2) || (this.y >= stage.stageHeight - this.height/2))
{
ballSpeedY *= -1;
}
else if ((this.x <= 0 + this.width/2) || (this.x >= stage.stageWidth - this.width/2))
{
ballSpeedX *= -1;
}
}
}
TheCpu
public class TheCpu extends MovieClip
{
public var cpu:TheCpu;
public var ball:Ball;
private var vx:Number = 5;
public function TheCpu()
{
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
this.x = 240;
this.y = 10;
this.addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(e:Event):void
{
/*if (this.x < ball.x - 10)
{
this.x += vx;
}
else if (this.x > ball.x + 10)
{
this.x -= vx;
}*/
}
}
J'ajouté à ma classe principale
private function onAddedToStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
trace("It's Alive!");
addBall();
addCPU();
}
public function addBall():void
{
var ball:MovieClip = stage.getChildByName("ball") as MovieClip
stage.addChild(ball);
}
public function addCPU():void
{
var cpu:MovieClip = stage.getChildByName("cpu") as MovieClip
stage.addChild(cpu);
}
}
mais maintenant il donne erreur TypeError: Erreur # 2007: enfant de paramètre doit être non nulle. à flash.display :: DisplayObjectContainer/addChild() à flash.display :: Scène/addChild() à src :: Main/addBall() à src :: Main/onAddedToStage()
et si J'utilise
var ball:Ball = new Ball();
var cpu:TheCpu = new TheCpu();
Je reçois TypeError: erreur # 1009: Impossible d'accéder à une propriété ou une méthode d'une référence d'objet nul. à src :: TheCpu() à src :: Main/addCPU() à src :: Main/onAddedToStage()
Je pense que je suis maintenant être vraiment stupide.
Essayez de lire sur http://www.kirupa.com/forum/showthread.php?223798-ActionScript-3-Tip-of-the-Day/page28&p=2167721#post2167721. En résumé, vous devrez utiliser des événements ou des références. Si vous débutez, vous n'avez probablement pas encore appris comment créer et envoyer vos propres événements (ou utiliser des références, d'ailleurs). Donc, à la place, je vous recommande de mettre tout votre code dans votre classe de document pour l'instant, et d'utiliser les classes une fois que vous en apprendrez plus sur la POO et comment communiquer entre les classes. –
Je ne suis pas d'accord avec Garry, à moins que vous ne soyez à court de temps, prenez le temps maintenant d'apprendre à utiliser les événements et les auditeurs. http://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html La principale chose à comprendre est que les événements proviennent de certains répartiteurs et que vous écoutez les événements sur ce répartiteur. Lorsque le répartiteur distribue un événement, toutes les fonctions enregistrées pour cet événement seront déclenchées. Aussi, si vous utilisez des trucs sur la bulle d'événements de scène de l'enfant au parent. Montrez le tutoriel ou montrez votre code pour plus d'aide. – shaunhusain