これが私の最初の投稿なので、まず、このコミュニティの皆さんを歓迎します。これまでに遭遇した問題に取り組むのに役立つ大量の情報をすでに見つけました。今、私は解決できない問題に遭遇しました。私は「Pang」タイプのゲームを作成しています。おそらく、ある種のバリエーションを見たりプレイしたりしたことがある人もいるでしょう。ということで要点。私は現在、クラスにリンクされたオブジェクトをステージ上でバウンドさせようとしています。私は、easeIn と easeOut トゥイーンを試してみることにしました。
メイン ドキュメント クラス内でトゥイーンを宣言します。
public static var upTween:Tween;
public static var downTween:Tween;
for ループを使用して、配列のすべてのオブジェクト部分に値を割り当てます。
public function bounce(event:Event):void
{
for (var i:uint = 0; i < bubbles1.length; i++)
{
upTween = new Tween(bubbles1[i], "y", Strong.easeOut, bubbles1[i].y, 250, 2, true);
downTween = new Tween(bubbles1[i], "y", Strong.easeIn, bubbles1[i].y, stage.stageHeight - 50 - bubbles1[i].height, 2, true);
}
}
ここで、Bubble.as クラス内からトゥイーンを開始しようとすると、null オブジェクト参照が取得されます。
おそらく、役立つ情報がもう少しあります。次のように、メイン クラス内からパブリック関数でオブジェクトをインスタンス化しています。
public function makeBubble(size:Number, xCoordinate:Number, yCoordinate:Number, xDir:Number):void
{
if (size == 1)
{
bubble = new Bubble(stage);
bubble.x = xCoordinate;
bubble.y = yCoordinate;
bubble.xDirection = xDir;
bubbles1.push(bubble);
stage.addChild(bubble);
}
完全な Bubble.as クラスは次のとおりです。
package com.zdravko.pong
{
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
public class Bubble extends MovieClip
{
private var stageRef:Stage;
var xDirection:Number;
var yDirection:Number;
var bubble2:Bubble2;
public function Bubble(stageRef:Stage)
{
// constructor code
this.stageRef = stageRef;
addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
}
function loop(event:Event):void
{
if(this.x >= stage.stageWidth - this.width)
{
this.x = stage.stageWidth - this.width - 5;
xDirection *= -1;
}
if(this.x <= 0)
{
this.x = 5;
xDirection *= -1;
}
if(this.y >= stage.stageHeight - 50 - this.height)
{
this.y = stage.stageHeight - 50 - this.height;
Engine.upTween.start();
}
if(this.y <= 250)
{
this.y = 250;
Engine.downTween.start();
}
this.x += xDirection;
if(hitTestObject(Engine.player) && Player.invul == false)
{
decreaseEnergy(.4);
Player.invul = true;
Player.invulTimer.start();
}
}
public function decreaseEnergy(dmg:Number):void
{
Engine.energy.scaleX -= dmg;
}
public function takeHit() : void
{
makeBubble(2, this.x + 50, this.y + 30, 8, 8);
makeBubble(2, this.x - 20, this.y - 30, -8, 8);
removeSelf();
Engine.playerScore += 500;
Engine.score.scoreBox.text = Engine.playerScore;
}
private function removeSelf() : void
{
removeEventListener(Event.ENTER_FRAME, loop);
if (stageRef.contains(this))
{
stageRef.removeChild(this);
}
}
private function makeBubble(size:Number, xCoordinate:Number, yCoordinate:Number, xDir:Number, yDir:Number):void
{
bubble2 = new Bubble2(stage);
bubble2.x = xCoordinate;
bubble2.y = yCoordinate;
bubble2.xDirection = xDir;
bubble2.yDirection = yDir;
Engine.bubbles2.push(bubble2);
stageRef.addChild(bubble2);
}
}
}