Volledige versie bekijken : Constructor wordt niet aangeroepen
Jeppey
%Europe/Berlin %837 %2007, 21:05
Ik ben wat aan het stoeien met een klasse en ik snap niet wat ik fout doe.
Ik heb een klasse gemaakt, die er zo uit ziet.
//Opgeslagen als Kaart.as
class Kaart{
private var kleur:Number;
private var waarde:Number;
private var bitmap:String;
public function Kaart(bit:String, klr:Number, wrd:Number){
this.bitmap = bit;
this.kleur = klr;
this.waarde = wrd;
}
}
In mijn fla heb ik de volgende code:
import Kaart;
cards:Array = new Array();
for(var n:Number = 0; n<52; n++){
var kaart = new Kaart("test", 1, n);
cards[n] = kaart;
}
Volgens mij doe ik hier toch echt niks fout, maar de compiler geeft de volgende error:
1180: Call to a possibly undefined method Kaart
Zie ik wat over het hoofd?
zezioen
%Europe/Berlin %846 %2007, 21:18
mischien map proberen het is tenslote een engels programma en een engelse as
Jeppey
%Europe/Berlin %848 %2007, 21:21
Uhm, ik heb zelf een bestand en klasse genaamd 'Kaart', dus 'Map' zal die helemaal niet kennen.
xtr0
%Europe/Berlin %857 %2007, 21:35
Werk je nu in AS 2 of AS 3?
Jeppey
%Europe/Berlin %880 %2007, 22:07
AS3, anders post ik het ergens anders:)
Voetsjoeba
%Europe/Berlin %884 %2007, 22:13
Moet er in AS3 geen package{ } rond je class komen ?
B-Mantis
%Europe/Berlin %886 %2007, 22:16
ja er moet idd package bij, en volgens mij ook nog
class Kaart extends MovieClip{ //of Object / enz
matzo
%Europe/Berlin %914 %2007, 22:56
Als een class 'Object' extend moet je dit geloof ik er niet bijschrijven. Alle classes extenden Object automatisch in as 2, en ik heb nog nergens zien staan dat dit in as 3 veranderd is.
Jeppey
%Europe/Berlin %925 %2007, 23:12
Dus ik zet in een extern bestand de package met klassen:
package pakketnaam{
class klassenaam{
...
}
}
En in mijn fla zet ik:
import bestandsnaam;
//en dan?
Dauntless
%Europe/Berlin %933 %2007, 23:24
Als je niet met packages wilt werken, gewoon dit:
package
{
class klassenaam
{
}
}
En aan de rest van je AS verandert er niets.
Jeppey
%Europe/Berlin %978 %2007, 00:28
Bedankt, ik heb echter nog steeds dezelfde fout in mijn code:
1180: Call to a possibly undefined method Kaart
Volgens F1 wordt dit alleen gegenereerd in strict mode, wat overigens niet erg is. Maar wat is er dan niet goed? De fout zit in deze regel:
var kaart = new Kaart("test", 1, 2);
Larsvu
%Europe/Berlin %996 %2007, 00:54
Heb je de 2 bestandjes wel in dezelfde folder staan?
Jeppey
%Europe/Berlin %002 %2007, 01:03
Ja, de fla en de as-file staan bij elkaar.
Voetsjoeba
%Europe/Berlin %022 %2007, 01:32
var kaart:Kaart = new Kaart("test", 1, 2); al geprobeerd ? ;)
TheDutch
%Europe/Berlin %347 %2007, 09:20
Heb je er nu al een package om heen ge-wrapped, zoals Dauntless aangaf? Dat is nodig vanaf AS 3 :).
Jeppey
%Europe/Berlin %423 %2007, 11:09
Ja dat heb ik gedaan en nu werkt het ineens wel?! Ik probeerde het gisteren ook en toen gaf die een fout aan.
Ook merk ik dat als ik alle objecten (Kaart in mijn geval) in een array zet en deze met een for-loop trace, dat in de helft van de gevallen undefined of NaN weergegeven wordt. Wanneer ik deze objecten apart aanroep geeft het wel object Kaart weer.
Ook als ik een lidfunctie heb gemaakt, staat er de ene keer TypeError #1006 value is not a function, maar na enkele keren Ctrl+Enter drukken werkt de functie wel en doet alles het prima.
Echt raar??!
TheDutch
%Europe/Berlin %429 %2007, 11:19
Laat je code daarvan eens zien, daar hebben we meer aan ;).
Jeppey
%Europe/Berlin %435 %2007, 11:26
De klasse opgeslagen als Kaart.as:
package{
public class Kaart{
private var kleur:Number;
private var waarde:Array;
private var bitmap:String;
public function Kaart(bit:String, klr:Number, wrd:Array){
this.bitmap = bit;
this.kleur = klr;
this.waarde = wrd;
}
public function getWaarde(el:Number):Number{
return this.waarde[el];
}
}
}
De code in de fla (in dezelfde map als Kaart.as):
import Kaart;
//Creëer speler en deler
var deler = new Array();
var speler = new Array();
//Maak alle mogelijke kaarten
var cards = new Array();
for(var kleur:Number = 1; kleur <= 4; kleur++){
for(var nummer:Number = 1; nummer<13; nummer++){
var waarde:Array = new Array();
waarde[0] = nummer;
if(nummer == 1){
waarde[1] = 11;
}
if(nummer > 10){
waarde[0] = 10;
}
var bestand:String = String(kleur*nummer);
var kaart:Kaart = new Kaart(bestand, kleur, waarde);
cards[kleur*nummer] = kaart;
}
}
//Maak het kaartendeck
var stack = new Array(52);
stack = cards;
stack = shuffle(stack);
//-----------------------FUNCTIES----------------------------------------------
function shuffle(arr:Array){
for(var i:Number = 0; i<arr.length; i++){
var index:Number = Math.floor(arr.length*Math.random());
var temp:Number;
temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
return arr;
}
function startGame(){
speler[speler.length] = stack.shift();
trace(speler[0].getWaarde(0));
}
//-----------------------EINDE FUNCTIES-----------------------------------------------
startGame();
TheDutch
%Europe/Berlin %444 %2007, 11:39
---------------------
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.