simie55
%Europe/Berlin %425 %2010, 11:12
Afgesplitst van: http://www.flashfocus.nl/forum/showthread.php?t=50456
Om een oud topic maar even nieuw leven in te blazen
Ik heb ong het zelfde probleem als hier, hij verwijderd de enemy wel maar onzichtbaar bestaat hij toch?
En ik krijg dus de melding:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at ParallaxDemo/onTick()
at flash.utils::Timer/flash.utils:Timer::_timerDispatch()
at flash.utils::Timer/flash.utils:Timer::tick()hier de code van de .as waar de enemy verwijderd word:
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class ParallaxDemo extends MovieClip
{
public var car:Car;
public var road:Road;
public var road2:Road;
public var roadContainer:MovieClip;
public var roadBreadth:Number;
public var hills:Hills;
public var hills2:Hills;
public var hillsBreadth:Number;
public var hillsContainer:MovieClip;
public var mountains:Mountains;
public var mountains2:Mountains;
public var mountainsBreadth:Number;
public var mountainsContainer:MovieClip;
public var sky:Sky;
public var skyContainer:MovieClip;
public var tree:Tree;
public var treeBreadth:Number;
public var treeContainer:MovieClip;
public var army:Array;
public var enemy:Enemy;
public var avatar:Avatar;
public var gameTimer:Timer;
public function ParallaxDemo()
{
car = new Car();
road = new Road();
road2 = new Road();
roadBreadth = 653.7;
hills = new Hills();
hills2 = new Hills();
hillsBreadth = 890.5;
mountains = new Mountains();
mountains2 = new Mountains();
mountainsBreadth = 751.5;
sky = new Sky();
tree = new Tree();
treeBreadth = 1000.0;
car.x = 275.0;
car.y = 250.0;
road.x = 0.0;
road.y = 294.0;
road2.x = road.x + roadBreadth;
road2.y = road.y;
hills.x = 0;
hills.y = 14.5;
hills2.x = hills.x + hillsBreadth;
hills2.y = hills.y;
mountains.x = 0;
mountains.y = 63.0;
mountains2.x = mountains.x + mountainsBreadth;
mountains2.y = mountains.y;
sky.x = 0;
sky.y = 0;
tree.x = 780.0;
tree.y = 175.0;
roadContainer = new MovieClip();
roadContainer.addChild( road );
roadContainer.addChild( road2 );
roadContainer.addChild( car );
hillsContainer = new MovieClip();
hillsContainer.addChild( hills );
hillsContainer.addChild( hills2 );
mountainsContainer = new MovieClip();
mountainsContainer.addChild( mountains );
mountainsContainer.addChild( mountains2 );
skyContainer = new MovieClip();
skyContainer.addChild( sky );
treeContainer = new MovieClip();
treeContainer.addChild( tree );
stage.addChild( skyContainer );
stage.addChild( mountainsContainer );
stage.addChild( hillsContainer );
stage.addChild( roadContainer );
army = new Array();
var newEnemy = new Enemy( 500, 350 );
stage.addChild( newEnemy );
army.push( newEnemy );
stage.addChild( treeContainer );
gameTimer = new Timer( 25 );
gameTimer.addEventListener( TimerEvent.TIMER, onTick );
gameTimer.start();
addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
public function onTick( timerEvent:TimerEvent ):void
{
if ( Math.random() < 0.02 )
{
var randomY:Number = Math.random() * 150 + 300;
var newEnemy:Enemy = new Enemy( 550, randomY );
army.push( newEnemy );
stage.addChild( newEnemy );
}
for each ( var enemy:Enemy in army )
{
enemy.moveDownABit();
if ( car.hitTestObject( enemy ) )
{
stage.removeChild( enemy );
//hier zou ik dan army.splice() moeten gebruiken?
}
}
}
public function onEnterFrame( evt:Event ):void
{
car.x = car.x + 10;
roadContainer.x = 275 - car.x;
if ( road.x + roadBreadth + roadContainer.x < 0 )
{
road.x = road.x + (2 * roadBreadth);
}
if ( road2.x + roadBreadth + roadContainer.x < 0 )
{
road2.x = road2.x + (2 * roadBreadth);
}
hillsContainer.x = (275 - car.x) * 1/5;
if ( hills.x + hillsBreadth + hillsContainer.x < 0 )
{
hills.x = hills.x + (2 * hillsBreadth);
}
if ( hills2.x + hillsBreadth + hillsContainer.x < 0 )
{
hills2.x = hills2.x + (2 * hillsBreadth);
}
mountainsContainer.x = (275 - car.x) * 1/16;
if ( mountains.x + mountainsBreadth + mountainsContainer.x < 0 )
{
mountains.x = mountains.x + (2 * mountainsBreadth);
}
if ( mountains2.x + mountainsBreadth + mountainsContainer.x < 0 )
{
mountains2.x = mountains2.x + (2 * mountainsBreadth);
}
treeContainer.x = (275 - car.x) * 3;
if ( tree.x + treeBreadth + treeContainer.x < 0 )
{
tree.x = tree.x + (2 * treeBreadth);
}
if (leftDown==true) {
car.x-=8;
}
if (upDown==true) {
car.y-=speed;
}
if (rightDown==true) {
car.x+=speed;
}
if (downDown==true) {
car.y+=speed;
}
if ( car.y < 170 + ( car.height / 2 ) )
{
car.y = 170 + ( car.height / 2 );
}
if ( car.y > 370 - ( car.height / 2 ) )
{
car.y = 370 - ( car.height / 2 );
}
}
}
}Als de auto nu de enemy raakt blijven deze even hangen, omdat hij blijkbaar blijft proberen de enemy te verwijderen terwijl dit al gebeurt is?
Hopelijk is dit makkelijk op te lossen met een Array.splice()
Iemand die me hier even verder kan helpen? alvast bedankt!
Om een oud topic maar even nieuw leven in te blazen
Ik heb ong het zelfde probleem als hier, hij verwijderd de enemy wel maar onzichtbaar bestaat hij toch?
En ik krijg dus de melding:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at ParallaxDemo/onTick()
at flash.utils::Timer/flash.utils:Timer::_timerDispatch()
at flash.utils::Timer/flash.utils:Timer::tick()hier de code van de .as waar de enemy verwijderd word:
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class ParallaxDemo extends MovieClip
{
public var car:Car;
public var road:Road;
public var road2:Road;
public var roadContainer:MovieClip;
public var roadBreadth:Number;
public var hills:Hills;
public var hills2:Hills;
public var hillsBreadth:Number;
public var hillsContainer:MovieClip;
public var mountains:Mountains;
public var mountains2:Mountains;
public var mountainsBreadth:Number;
public var mountainsContainer:MovieClip;
public var sky:Sky;
public var skyContainer:MovieClip;
public var tree:Tree;
public var treeBreadth:Number;
public var treeContainer:MovieClip;
public var army:Array;
public var enemy:Enemy;
public var avatar:Avatar;
public var gameTimer:Timer;
public function ParallaxDemo()
{
car = new Car();
road = new Road();
road2 = new Road();
roadBreadth = 653.7;
hills = new Hills();
hills2 = new Hills();
hillsBreadth = 890.5;
mountains = new Mountains();
mountains2 = new Mountains();
mountainsBreadth = 751.5;
sky = new Sky();
tree = new Tree();
treeBreadth = 1000.0;
car.x = 275.0;
car.y = 250.0;
road.x = 0.0;
road.y = 294.0;
road2.x = road.x + roadBreadth;
road2.y = road.y;
hills.x = 0;
hills.y = 14.5;
hills2.x = hills.x + hillsBreadth;
hills2.y = hills.y;
mountains.x = 0;
mountains.y = 63.0;
mountains2.x = mountains.x + mountainsBreadth;
mountains2.y = mountains.y;
sky.x = 0;
sky.y = 0;
tree.x = 780.0;
tree.y = 175.0;
roadContainer = new MovieClip();
roadContainer.addChild( road );
roadContainer.addChild( road2 );
roadContainer.addChild( car );
hillsContainer = new MovieClip();
hillsContainer.addChild( hills );
hillsContainer.addChild( hills2 );
mountainsContainer = new MovieClip();
mountainsContainer.addChild( mountains );
mountainsContainer.addChild( mountains2 );
skyContainer = new MovieClip();
skyContainer.addChild( sky );
treeContainer = new MovieClip();
treeContainer.addChild( tree );
stage.addChild( skyContainer );
stage.addChild( mountainsContainer );
stage.addChild( hillsContainer );
stage.addChild( roadContainer );
army = new Array();
var newEnemy = new Enemy( 500, 350 );
stage.addChild( newEnemy );
army.push( newEnemy );
stage.addChild( treeContainer );
gameTimer = new Timer( 25 );
gameTimer.addEventListener( TimerEvent.TIMER, onTick );
gameTimer.start();
addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
public function onTick( timerEvent:TimerEvent ):void
{
if ( Math.random() < 0.02 )
{
var randomY:Number = Math.random() * 150 + 300;
var newEnemy:Enemy = new Enemy( 550, randomY );
army.push( newEnemy );
stage.addChild( newEnemy );
}
for each ( var enemy:Enemy in army )
{
enemy.moveDownABit();
if ( car.hitTestObject( enemy ) )
{
stage.removeChild( enemy );
//hier zou ik dan army.splice() moeten gebruiken?
}
}
}
public function onEnterFrame( evt:Event ):void
{
car.x = car.x + 10;
roadContainer.x = 275 - car.x;
if ( road.x + roadBreadth + roadContainer.x < 0 )
{
road.x = road.x + (2 * roadBreadth);
}
if ( road2.x + roadBreadth + roadContainer.x < 0 )
{
road2.x = road2.x + (2 * roadBreadth);
}
hillsContainer.x = (275 - car.x) * 1/5;
if ( hills.x + hillsBreadth + hillsContainer.x < 0 )
{
hills.x = hills.x + (2 * hillsBreadth);
}
if ( hills2.x + hillsBreadth + hillsContainer.x < 0 )
{
hills2.x = hills2.x + (2 * hillsBreadth);
}
mountainsContainer.x = (275 - car.x) * 1/16;
if ( mountains.x + mountainsBreadth + mountainsContainer.x < 0 )
{
mountains.x = mountains.x + (2 * mountainsBreadth);
}
if ( mountains2.x + mountainsBreadth + mountainsContainer.x < 0 )
{
mountains2.x = mountains2.x + (2 * mountainsBreadth);
}
treeContainer.x = (275 - car.x) * 3;
if ( tree.x + treeBreadth + treeContainer.x < 0 )
{
tree.x = tree.x + (2 * treeBreadth);
}
if (leftDown==true) {
car.x-=8;
}
if (upDown==true) {
car.y-=speed;
}
if (rightDown==true) {
car.x+=speed;
}
if (downDown==true) {
car.y+=speed;
}
if ( car.y < 170 + ( car.height / 2 ) )
{
car.y = 170 + ( car.height / 2 );
}
if ( car.y > 370 - ( car.height / 2 ) )
{
car.y = 370 - ( car.height / 2 );
}
}
}
}Als de auto nu de enemy raakt blijven deze even hangen, omdat hij blijkbaar blijft proberen de enemy te verwijderen terwijl dit al gebeurt is?
Hopelijk is dit makkelijk op te lossen met een Array.splice()
Iemand die me hier even verder kan helpen? alvast bedankt!