1

私はいくつかの逆運動学と状態機械を含む基本的なスネークゲームを開発しようとしています。私はそれを取得しようとしているので、ヘビの最初のセグメントが特定の「マウス」とやりとりすると消えます。しかし、私がするとき、それは動作しないと私はArgumentErrorを取得する:エラー#2025:提供されたDisplayObjectは、呼び出し元の子でなければなりません。ArgumentError:ステージから子を取り除く

は、ここに私のコードです:

package 
 
{ 
 
\t import agent.Agent; 
 
\t import flash.display.Sprite; 
 
\t import flash.display.StageAlign; 
 
\t import flash.display.StageScaleMode; 
 
\t import flash.events.Event; 
 
\t import flash.events.MouseEvent; 
 
\t import flash.events.KeyboardEvent; 
 
\t import flash.geom.Point; 
 
\t public class Main extends Sprite 
 
\t { 
 
\t \t private var Agents:Vector.<Agent>; 
 
\t \t \t \t private var segments:Array; 
 
\t \t private var numSegments:uint = 150; 
 
\t \t private var player:Point = new Point (15, 15) 
 
\t \t public function Main():void 
 
\t \t { 
 
\t \t \t if (stage) init(); 
 
\t \t \t else addEventListener(Event.ADDED_TO_STAGE, init); 
 
\t \t } 
 
\t \t 
 
\t \t private function init(e:Event = null):void 
 
\t \t { 
 
\t \t \t stage.align = StageAlign.TOP_LEFT; 
 
\t \t \t stage.scaleMode = StageScaleMode.NO_SCALE; 
 
\t \t \t segments = new Array(); 
 
\t \t \t for(var i:uint = 0; i < numSegments; i++) 
 
\t \t \t { 
 
\t \t \t \t var segment:Segment = new Segment (5, 10); 
 
\t \t \t \t addChild(segment); 
 
\t \t \t \t segments.push(segment); 
 
\t \t \t } 
 
\t \t \t //updatePoint(); 
 
\t \t \t addEventListener(Event.ENTER_FRAME, onEnterFrame); 
 

 
\t \t \t removeEventListener(Event.ADDED_TO_STAGE, init); 
 
\t \t \t stage.scaleMode = StageScaleMode.NO_SCALE; 
 
\t \t \t stage.align = StageAlign.TOP_LEFT; 
 
\t \t \t // entry point 
 
\t \t \t graphics.beginFill(0xeeeeee); 
 
\t \t \t graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 
 
\t \t \t 
 
\t \t \t Agents = new Vector.<Agent>(); 
 
\t \t \t addEventListener(Event.ENTER_FRAME, gameloop); 
 
\t \t \t for (var x:int = 0; x < 10; x++) 
 
\t \t \t { 
 
\t \t \t \t var a:Agent = new Agent(); 
 
\t \t \t \t addChild(a); 
 
\t \t \t \t Agents.push(a); 
 
\t \t \t \t a.x = Math.random() * 10; 
 
\t \t \t \t a.y = Math.random() * 10; 
 
\t \t \t } 
 
\t \t \t stage.addEventListener(MouseEvent.CLICK, createAgent); 
 
\t \t } 
 
\t \t 
 
\t \t private function createAgent(e:MouseEvent):void 
 
\t \t { 
 
\t \t \t var a:Agent = new Agent(); 
 
\t \t \t stage.addChild(a); 
 
\t \t \t Agents.push(a); 
 
\t \t \t a.x = mouseX; 
 
\t \t \t a.y = mouseY; 
 
\t \t } 
 
\t \t 
 
\t \t private function gameloop(e:Event):void 
 
\t \t { 
 
\t \t \t for each (var a: Agent in Agents) { 
 
\t \t \t \t a.update(); 
 
\t \t \t \t trace ("Follow me on Twitter."); 
 
\t \t \t \t for each(var target: Segment in segments) 
 
\t \t \t \t { 
 
\t \t \t \t \t if (target.hitTestPtarget.x, a.y + target.y, true)) 
 
\t \t \t \t \t { 
 
\t \t \t \t \t \t stage.removeChild(a); 
 
\t \t \t \t \t } 
 
\t \t \t \t } 
 
\t \t \t \t 
 
\t \t \t } 
 
\t \t } 
 
\t \t private function onEnterFrame(event:Event):void 
 
\t \t { 
 
\t \t \t drag(segments[0], player.x, player.y); 
 
\t \t \t stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); 
 

 
\t \t \t for(var i:uint = 1; i < numSegments; i++) 
 
\t \t \t { 
 
\t \t \t \t var segmentA:Segment = segments[i]; 
 
\t \t \t \t var segmentB:Segment = segments[i - 1]; 
 
\t \t \t \t drag(segmentA, segmentB.x, segmentB.y); 
 
\t \t \t } 
 
\t \t } 
 
\t \t private function keyDown (evt: KeyboardEvent): void { 
 
\t \t \t //87=w 68=d 83=s 65=a 
 
\t \t \t if (evt.keyCode == 87) 
 
\t \t \t { 
 
\t \t \t \t player.y-=50; 
 
\t \t \t } 
 
\t \t \t else if (evt.keyCode == 83) 
 
\t \t \t { 
 
\t \t \t \t player.y+=50; 
 
\t \t \t } 
 
\t \t \t else if (evt.keyCode == 68) 
 
\t \t \t { 
 
\t \t \t \t player.x+=50; 
 
\t \t \t } 
 
\t \t \t else if (evt.keyCode == 65) 
 
\t \t \t { 
 
\t \t \t \t player.x-=50; 
 
\t \t \t } 
 
\t \t \t trace (player.x + " " + player.y); 
 
\t \t } 
 
\t \t private function drag(segment:Segment, xpos:Number, ypos:Number):void 
 
\t \t { 
 
\t \t \t 
 
\t \t \t var dx:Number = xpos - segment.x; 
 
\t \t \t var dy:Number = ypos - segment.y; 
 
\t \t \t var angle:Number = Math.atan2(dy, dx); 
 
\t \t \t segment.rotation = angle * 180/Math.PI; 
 
\t \t \t 
 
\t \t \t var w:Number = segment.getPin().x - segment.x; 
 
\t \t \t var h:Number = segment.getPin().y - segment.y; 
 
\t \t \t segment.x = xpos - w; 
 
\t \t \t segment.y = ypos - h; 
 
\t \t } 
 

 
\t \t 
 
\t } 
 
}

私は同じトピックを持つ他の記事を見て試してみましたが、私はちょうど私が間違ってやっているのか理解していません。どんな助けでも大歓迎です!

答えて

2

エージェントとセグメントをローカル(メイン)に追加し、後でそれらをステージから削除しようとしています(これはswfの最上位であり、別の表示オブジェクトです)。

init関数でstage.addChild(...)を実行するか(これはもっと良いオプションです)、stage.removeChild(...)を他の場所のremoveChild(...)に置き換えてください。地元のメインスペースにあるオブジェクト(誰が知っている、後であなたのメインを後に移動したいと思うかもしれない、すべてを一度に見えなくするなど)。

関連する問題