Snabb hjälp med ActionScript 3.0 till ett spel.

Permalänk
Medlem

Snabb hjälp med ActionScript 3.0 till ett spel.

Hej!
Jag håller just nu på med ett spel i ActionScript 3.0, där jag har stjärnor och specialstjärnor.
Jag vill att dessa specialstjärnor ska komma fram var 8:e fångad stjärna
(helst olika gång på gång så antar att en Math.Random() bör användas till det?)

Problemet är nu att jag vill ta bort specialstjärnan när den kolliderar
med min enhörning (som då är huvudkaraktären i spelet),
men för tillfället så blir det bara fler och fler.
Tänkte även att specialstjärnan skulle ge mer poäng än den vanliga.

(Ursäkta för dålig beskrivning men ställ frågor om något är oklart)
Tacksam för snabba svar!

Koden för specialstjärnan:
Antar att det är removeSpecStjärna som inte är helt rätt, längst ner.

//createSpecStjärna(1);

function createSpecStjärna(numberOfSprites:Number)
{
var stjärn:SpecStjärna;
for (var i:uint = 0; i<numberOfSprites; i++){

stjärn = getNewSpecStjärna();
getNewPos(stjärn);
addChild(stjärn);
stjärn.addEventListener(Event.ENTER_FRAME,moveSpecStjärna);
}
}

function getNewSpecStjärna():SpecStjärna{

var stjärn:SpecStjärna = new SpecStjärna();
stjärn.alpha = Math.random() + 0.5;
stjärn.scaleX = stjärn.scaleY = 0.5 + 0.5;
stjärn.hastighet = 15;
stjärn.vind =(Math.random()*15)-10;
return stjärn;
}

function getNewPos(stjärn:SpecStjärna):void{

stjärn.y =(Math.random()*400);
stjärn.x =(Math.random()*40)-50;
}

function moveSpecStjärna(e:Event):void{

var stjärn:SpecStjärna = SpecStjärna(e.currentTarget);
stjärn.x += stjärn.hastighet;
stjärn.y += stjärn.vind;

if (stjärn.hitTestObject(enhörning_mc)){

getNewPos(stjärn);

}

if (stjärn.x >= 450){

getNewPos(stjärn);
}
else if (stjärn.y>=600){

getNewPos(stjärn);
}
else if (stjärn.y<=-20){

getNewPos(stjärn);
}

function removeSpecStjärna():void{

//Är osäker på denna metod, antar att det är här felet ligger.
stjärn.removeEventListener(Event.ENTER_FRAME, removeSpecStjärna);
removeChild(stjärn);
}
}

Dold text

Koden till den vanliga stjärnan:

createStjärna(3);
var score:Number = 0;

function createStjärna(numberOfSprites:Number){

var stjär:Stjärna;

for (var i:uint = 0; i<numberOfSprites; i++){

stjär = getNewStjärna();
getNewPosition(stjär);
addChild(stjär);
stjär.addEventListener(Event.ENTER_FRAME,moveStjärna);
}
}

function getNewStjärna():Stjärna{

var stjär:Stjärna = new Stjärna();
stjär.alpha = Math.random() + 0.5;
//stjär.scaleX = stjär.scaleY =(Math.random()*0.5)+0.5;
stjär.hastighet = (Math.random()*10);
stjär.vind =(Math.random()*4);
return stjär;
}

function getNewPosition(stjär:Stjärna):void{

stjär.y =(Math.random()*200)-50;
stjär.x =(Math.random()*50)-50;
}

function moveStjärna(e:Event):void{

var stjär:Stjärna = Stjärna(e.currentTarget);
stjär.x += stjär.hastighet;
stjär.y += stjär.vind;

if (stjär.hitTestObject(enhörning_mc)){

getNewPosition(stjär);
score ++;
poang_txt.text=String(score);
if (score %5){
createSpecStjärna(1);
}
}

if (stjär.x >= 450){

getNewPosition(stjär);

}

else if (stjär.y>=600){

getNewPosition(stjär);

}

else if (stjär.y<=-20){

getNewPosition(stjär);

}
}

Dold text
Visa signatur

"What is to give light must endure burning." - Viktor Frankl

Permalänk

byt ut

if (stjärn.hitTestObject(enhörning_mc)){ getNewPos(stjärn); }

till

if (stjärn.hitTestObject(enhörning_mc)){ removeSpecStjärna(); }

Permalänk
Medlem
Skrivet av EpicBlobfish:

byt ut

if (stjärn.hitTestObject(enhörning_mc)){ getNewPos(stjärn); }

till

if (stjärn.hitTestObject(enhörning_mc)){ removeSpecStjärna(); }

Blir inte bättre, får dock denna outputen:

ArgumentError: Error #2025: Det angivna DisplayObject måste vara underordnat det anropande objektet.
at flash.display:: DisplayObjectContainer/removeChild()
at MethodInfo-16()
at Spel_3_fla::MainTimeline/moveSpecStjärna()

Visa signatur

"What is to give light must endure burning." - Viktor Frankl

Permalänk
Medlem

Nu har jag aldrig jobbat med ActionScript, men det är som i all kodning försök minimmera koden.
Börja jobba med vanliga stjärnor först och sedan när detta fungerar kan du börja med specialstjärnor.

Antar att du vill ta bort stjärnorna istället för att ändra position som EpicBobFish var inne på.
Nu kan jag inte ActionScript som jag nämde innan men borde det inte vara att i din removeEvent att du har samma funktion som du registrerar med?

stjärn.removeEventListener(Event.ENTER_FRAME, moveSpecStjärna);

Sen får du gå igenom vad som är child och parent etc, så du jobbar med rätt saker. Likaså med parametrar etc.

Men försök att arbeta med vanliga stjärnor först och försök få det att fungera att ta bort dessa.

Hoppas det hjälper lite.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem
Skrivet av NoPaiN^:

Nu har jag aldrig jobbat med ActionScript, men det är som i all kodning försök minimmera koden.
Börja jobba med vanliga stjärnor först och sedan när detta fungerar kan du börja med specialstjärnor.

Antar att du vill ta bort stjärnorna istället för att ändra position som EpicBobFish var inne på.
Nu kan jag inte ActionScript som jag nämde innan men borde det inte vara att i din removeEvent att du har samma funktion som du registrerar med?

stjärn.removeEventListener(Event.ENTER_FRAME, moveSpecStjärna);

Sen får du gå igenom vad som är child och parent etc, så du jobbar med rätt saker. Likaså med parametrar etc.

Men försök att arbeta med vanliga stjärnor först och försök få det att fungera att ta bort dessa.

Hoppas det hjälper lite.

Ja men det var ungefär så jag tänkte, så jag provade både och men inget funkade.
Mina vanliga stjärnor fungerar så som det är tänkt, de byter position när de slår i enhörningen,
(Dvs så det alltid är x antal stjärnor på scenen) och då får man poäng

Visa signatur

"What is to give light must endure burning." - Viktor Frankl

Permalänk
Medlem

Men när du försöker ta bort en child, tänk på vad är stjärn vad är parent vad är child?
Du kan ju sätta ett name när du skapar upp dina stjärnor sen använda namnet när du ska ta bort?
Antingen fixar du en inparameter till din getNewStjärnSpec och skickar in i från din loop.
Alternativt gör du en setName funktion.

stjärn = getNewSpecStjärna(i); stjärn.name ='spec' + i; removeChild(getChildByName('spec0'));

Typ, du förstår säkert, hoppas det kan hjälpa.
Har som sagt aldrig jobbat med ActionScript, kanske är nån som kan hjälpa dig bättre.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

Hm, provade både och det funkar tyvärr inte heller. Kan ju visserligen vara så att jag skriver in dem på fel ställen..

Visa signatur

"What is to give light must endure burning." - Viktor Frankl

Permalänk
Medlem

Pasta din kod och kompileringsfel så blir det lättare.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770