PDA

Volledige versie bekijken : classes en mappen


B-Mantis
%Europe/Berlin %884 %2007, 22:14
hey,

Ik heb een aantal classes, die in verschillende mappen staan.
Main.as
playerGun.as
(map 'enemies').enemy_rifleman.as

ik kan vanaf een movieclip van de class playerGun zonder problemen linken naar Main door te zeggen:
Main(root).var1 = x
Main(root).function(x,y,23,4)

maar enemy_rifleman kent Main(root) niet. Hoe kan ik naar Main(root) casten?

Danku very veel!

TheDutch
%Europe/Berlin %902 %2007, 22:40
B-Mantis, probeer "stage" in plaats van "root". Verder denk ik dat je jezelf eens moet afvragen of je wel op de goede weg zit. Ik zie je nu al eventjes AS 3 programmeren en je probeert dit op een procedurele manier, iets wat niet meer mogelijk is vanaf AS 3. Je moet OO programmeren maar je bent erg aan het stuntelen en weet eigenlijk niet goed wat je aan het doen bent. Je zal dieper in de knoop raken met al je code en uiteindelijk is er niets meer van te maken en kan je opnieuw beginnen. TIP: Koop een goed boek over AS 3 waar OOP goed in uitgelegd wordt. AS 3 is niet meer het scripten hoe je dat gewend bent, het is een echte programmeertaal geworden wat niet even snel te leren is als een scripttaal :).

stefanw_nl
%Europe/Berlin %904 %2007, 22:42
als je het op deze manier doet is bij de init van nde class enemy_rifleman de root structuur nog niet bekend

var objEnemy_rifleman:enemy_rifleman = new enemy_rifleman();
addChild(objEnemy_rifleman);

Als je het op deze manier doet wel


var objEnemy_rifleman:enemy_rifleman;
addChild(objEnemy_rifleman = new enemy_rifleman());

Misschien helpt het zo

edit: Toevoeging aan het stuk van thedutch

Probeer dan in de class enemy_rifleman

var rooter = this.root;
var objIets.x = rooter.jeVar;

B-Mantis
%Europe/Berlin %500 %2007, 13:01
//theDutch:
Ik volg wel allerlei tutorials, ik denk dat ik het op zich wel aardig doe. Ik gebruik slechts classes (geen AS op movieclips oid) en probeer over het algemeen iets pas toe te passen als ik begrijp hoe het werkt. Maar ik zal inderdaad eens gaan kijken naar een boek, want ik vind het wel belangrijk alles vanaf het begin goed te doen. En er zijn inderdaad veel dingen die ik nog niet begrijp. (Zoals dit: root.function(arg1,arg2) werkt niet maar var myroot = root;
myroot.function(arg1,arg2) werkt wel weer.
Maar bedankt voor de reactie!
Stefan:
Het eerste werkt voor mijn niet, omdat ik de var objEnemy_rifleman wil laten linken naar dat object, en op die manier linkt ie naar de class. Maar de tweede werkte wel. Kan je me misschien ook uitleggen waarom flash root.function() niet begrijpt en die methode wel werkt?


edit:
wat ik ook erg vreemd vind is deze traces en hun uitkomsten:
trace("root: " + root);
trace("stage : " + stage);
trace("Root: " + Root);
trace("parent: " + parent);
trace("parent.parent: " + parent.parent);
trace(Root == root);
//uitkomsten:
root: [object Main]
stage : [object Stage]
Root: [object Main]
parent: [object depth]
parent.parent: [object Main]
true

vooral het feit dat Root == root
ik heb namelijk Stefan's methode gebruikt:
var Root = root;
root.function() werkt niet, Root.function werkt wel.

stefanw_nl
%Europe/Berlin %541 %2007, 13:59
De precieze reden kan ik je niet ff uitleggen te lang geleden op school gehad. Maar volgens mij kan hij niet op root functies laten uitvoeren om dat hij het type dan niet kent. Als je een var aanmaakt en de value van root mee geeft. Kan je op de var wel weer public functies en vars aanspreken.

B-Mantis
%Europe/Berlin %853 %2007, 21:29
Kan iemand mij helpen met eenzelfde soort probleem?
Ik heb een class enemy, en een subclass enemy_rifleman
mijn document class roept beide scripts op;
import scripts.enemies.enemy_rifleman;
import scripts.enemy

enemy_rifleman heeft dus in zijn script staan:
public class enemy_rifleman extends enemy {

de bestanden staan in de goede map, maar enemy_rifleman 'kent' zijn superclass enemy niet. Als ik enemy.as in de map scripts/enemies zet het ik dit probleem niet maar ik heb hem liever in de map scripts staan (overzichtelijker).

stefanw_nl
%Europe/Berlin %564 %2007, 14:32
verander je enemy_rifleman.as naar.


package scripts.enemies
{
import scripts.enemy;

public class enemy_rifleman extends enemy
{
etc


in de ducument hoef je niet perse enemy te importeren. Tenzij je ook een enemy class wilt aan roepen.

B-Mantis
%Europe/Berlin %720 %2007, 18:17
dank!

stefanw_nl
%Europe/Berlin %375 %2007, 10:00
no problem