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 (...)로 바꿉니다. 로컬 메인 공간에있는 객체들 (누가 나중에 당신의 Main을 돌아 다니고 싶다면, 모든 것을 한 번에 보이지 않게 할 것입니다).