View Full Version : Confusing classes blocking eachother
frankonline
November 26th, 2007, 08:37 AM
Hi again.
Ok, I don't know what's causing it, but one of my classes is blocking another somehow. Here's a nutshell version of my code:
package classes {
import flash.display.Sprite;
import classes.Class1;
import classes.Class2;
public class Test extends Sprite {
private var container:Sprite = new Sprite();
private var sprite1:Class1 = new Class1();
private var sprite2:Class2 = new Class2();
public function Test() {
stage.addChild(container);
container.addChild(sprite1);
container.addChild(sprite2);
}
}
}
Now, Class1 and Class2 have the same superclass which they inherit some stuff from, and they both look very much alike, using the same variable and function names.
When I run the script, both classes are loaded, and container.numChildren is 2, as expected, but only sprite1 is visible on the stage!
If I remove either one of the classes, the remaining one works, and is visible on the stage, but they don't work together. The last one to be included doesn't even execute it's initial functions.
What may be the solution to this?
/ Frank
Dazzer
November 26th, 2007, 08:53 AM
Might happen for some reason... if you provide abit more code maybe we can figure this one out.
- Superclass, and Class code.
- try tracing both sprites? or position them.
frankonline
November 26th, 2007, 09:35 AM
Ok, here's a simplified version of my Superclass:
package classes {
import flash.display.Sprite;
import classes.OtherClass;
public class Superclass extends Sprite {
protected var otherclass:OtherClass = new OtherClass();
protected var string:String = new String();
protected var sprite:Sprite = new Sprite();
public function Superclass() {
// Variables goes here
}
public function rectangle(color:uint):Sprite {
var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(color, 1);
sprite.graphics.lineStyle(0, color, 1);
sprite.graphics.drawRect(0, 0, 200, 200);
sprite.graphics.endFill();
return sprite;
}
}
}And here's what Class1 and Class2 looks like essentially:
package classes {
public class Class1 extends Superclass {
public function Class1() {
string = 'meh';
sprite = new rectangle(0xFF0000);
this.addChild(sprite);
trace('hello from Class1');
otherclass.dostuff('whatever');
}
}
}Class1 and Class2 do the same things, but with different settings and information. Their variable and function names are the same, but they are not 100% alike in how they are used.
In the last included class otherclass.dostuff() doesn't execute, but the trace message is shown. In the first included class there is no problems.
Any ideas?
/ Frank
Dazzer
November 26th, 2007, 09:54 AM
Well the only thing I can think off at the moment is that your sprites are overlapping one another... lol
Sorry I can't help.
Felixz
November 26th, 2007, 01:25 PM
sprite = new rectangle(0xFF0000); new is useless and gives error!!
protected var string:String = new String();
protected var sprite:Sprite = new Sprite();
is also useless, could be just
protected var string:String;
protected var sprite:Sprite;And I tried to reproduce ur error and Everything works fine. If u could upload all source I could find a solution to ur problem :(
frankonline
November 26th, 2007, 04:15 PM
Ok guys, you're not going to believe this. This is seriously weird.
After some tedious debugging, I've stripped it down to this simple code:
(document class)
package classes {
import flash.display.Sprite;
public class Test extends Sprite {
public function Test() {
var sprite:Sprite = make_sprite(true, 'whatever');
}
private function make_sprite(complex:Boolean, tag:String):Sprite {
var test:uint = 0;
var sprite:Sprite = new Sprite();
return sprite;
}
}
}
This produces the following modest little error:
verify classes::Test/::make_sprite()
stack:
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$]
locals: classes::Test Boolean String? * *
0:getlocal0
stack: classes::Test
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$]
locals: classes::Test Boolean String? * *
1:pushscope
stack:
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? * *
2:pushbyte 0
stack: int
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? * *
4:convert_u
stack: uint
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? * *
5:setlocal3
stack:
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? uint *
6:pushnull
stack: null
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? uint *
7:coerce flash.display::Sprite
stack: flash.display::Sprite?
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? uint *
9:setlocal 4
stack:
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? uint flash.display::Sprite?
11:pushbyte 0
stack: int
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? uint flash.display::Sprite?
13:convert_u
stack: uint
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? uint flash.display::Sprite?
14:setlocal3
stack:
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? uint flash.display::Sprite?
15:findpropstrict flash.display::Sprite
stack: global
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? uint flash.display::Sprite?
17:constructprop 1 0
stack: flash.display::Sprite
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? uint flash.display::Sprite?
20:coerce flash.display::Sprite
stack: flash.display::Sprite
scope: [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ classes::Test$] classes::Test
locals: classes::Test Boolean String? uint flash.display::Sprite?
22:dup
VerifyError: Error #1023: Stack overflow occurred.
at classes::Test/::make_sprite()
at classes::Test$iinit()
What's even more peculiar is that if you remove the "var test:uint = 0;" part, everything works just fine.
In fact, you're not allowed to have any code before "var sprite:Sprite = new Sprite();", or you face the fantastic error message again.
Pretty interesting, isn't it?
/ Frank
Felixz
November 26th, 2007, 04:39 PM
WOW, I had once that Stack Overflow Error, but i used prevoius ersions o restore last working code. But when You reverse order:
var sprite:Sprite = new Sprite();
var test:uint = 0;There is no error o.0
It should be reported to Adobe I think...
raal
November 27th, 2007, 04:15 AM
Can this be some sort of issue with the garbage collector? Your constructor is assigning the sprite to a variable that is immediately available for disposing.
I'd try to declare the variable as part of the class rather than the constructor scope, IE:
class ... {
private var sprite:Sprite;
public function Test() {
sprite = make_sprite(..);
}
}
I'm grasping at straws though.
raal
Powered by vBulletin® Version 4.1.10 Copyright © 2012 vBulletin Solutions, Inc. All rights reserved.