Ik ben bezig aan een nieuwe flash game, een ruimtespel waarin je vijandelijke schepen en meteorieten moet kapot schieten enz. Ik heb nu een basisruimteschip gemaakt dat al kan schieten, maar ik wil voor de volgende dingen zorgen:
1. Als ik nu op spatie blijf drukken, blijft hij kogels schieten, ik zou willen dat er pas om de seconde een kogel mag geschoten worden.
2. Als ik nu op pijltje naar onder en pijltje naar links druk, gaat hij maar in 1 van de twee richtingen. Hoe moet ik ervoor zorgen dat hij ook schuin kan gaan ?
3. Mijn kogel bestaat uit 2 delen, de kogel zelf en een lange staart (met vuur in de ruimte). Nu zou ik willen dat als ik vijandelijke ruimteschepen toevoeg, dat die alleen kapot mogen gaan als de kogel zelf hen raakt, niet de staart (ook al is de staart recht, als iets lang ronddraait en het komt tegen de staart, mag het niet kapot gaan.).
Hopelijk zijn mijn problemen een beetje duidelijk uitgelegd. Dit is de code:
Antwoord op punt 1: normaal wordt de handler constant aangeroepen. Je zou hier kunnen de laatste execution tijd bijhouden, en dan pas verdergaan als deze meer dan een seconde geleden is.
Voor punt drie komt het er op neer dat je een hittest moet doen op enkel de kop, niet de staart, en somehow opvragen WAAR de hittest zich juist voordoet.. misschien kan je nog een apart stuk toevoegen aan je "raket" in de vorm van de raakpunten, en daarop de hittest doen.
stop();
stage.addEventListener(KeyboardEvent.KEY_DOWN, chkDownkey);
// HIER DEFINIEER JE EEN DATUM OBJECT, DAARIN STOP JE DE DATUM VAN VANDAAG
var lastSpaceBarHandlerTime = [NU - AS is mijn ding niet, dus zoek dat zelf maar]
function chkDownkey(e:KeyboardEvent):void{
var key=e.keyCode;
var step=5;
switch (key) {
case Keyboard.LEFT :
if(spaceship.x > 27){
spaceship.x -= step;
}
break;
case Keyboard.RIGHT :
if(spaceship.x < 650){
spaceship.x += step;
}
break;
case Keyboard.UP :
if(spaceship.y > 25){
spaceship.y -= step;
}
break;
case Keyboard.DOWN :
if(spaceship.y < 432){
spaceship.y += step;
}
break;
case Keyboard.SPACE :
// HIER CHECK JE OF HET AL EEN SECONDE GELEDEN IS DAT ER EEN DING IS AFGEVUURD
if([VERSCHIL TUSSEN NU EN lastSpaceBarHandlerTime IN SECONDEN] >= 1) {
var kogel:kogel_total_mc=new kogel_total_mc();
kogel.x=spaceship.x + 33;
kogel.y=spaceship.y;
addChild(kogel);
lastSpaceBarHandlerTime = [NU];
}
break;
}
}
// HIER DEFINIEER JE EEN DATUM OBJECT, DAARIN STOP JE DE DATUM VAN VANDAAG
var lastSpaceBarHandlerTime = [NU - AS is mijn ding niet, dus zoek dat zelf maar]
function chkDownkey(e:KeyboardEvent):void{
varkey=e.keyCode;
var step=5;
switch(key){
case Keyboard.LEFT :
if(spaceship.x>27){
spaceship.x -= step;
}
break;
case Keyboard.RIGHT :
if(spaceship.x<650){
spaceship.x += step;
}
break;
case Keyboard.UP :
if(spaceship.y>25){
spaceship.y -= step;
}
break;
case Keyboard.DOWN :
if(spaceship.y<432){
spaceship.y += step;
}
break;
case Keyboard.SPACE :
// HIER CHECK JE OF HET AL EEN SECONDE GELEDEN IS DAT ER EEN DING IS AFGEVUURD
if([VERSCHIL TUSSEN NU EN lastSpaceBarHandlerTime IN SECONDEN]>= 1){
var kogel:kogel_total_mc=new kogel_total_mc();
kogel.x=spaceship.x + 33;
kogel.y=spaceship.y;
addChild(kogel);
lastSpaceBarHandlerTime = [NU];
}
break;
}
}
Het enige wat je nu dus nog moet doen is kijken hoe datums werken in Flash, en hoe je het verschil tussen twee datums in seconden te weten komt. Thankyoucomegain.
ok, ik vind het idee wel goed, maar het is een hele hoop code, ik had gedacht dat dat iets eenvoudiger kon. Weet iemand anders mss nog iets om dit eenvoudiger op te lossen. Ik zal nu beginnen om jouw code uit te proberen.
Grt,Lolll
Edit: ik ben niet echt geslaagd, ik weet echt niet hoe ik dat in mijn script moet invoegen, ik heb ook al op google gezocht, maar ik vind alleen maar ingewikkelde classes.
EDIT EDIT: Het schuin gaan heb ik even achterwegen gelaten, maar het lukt me niet om een juiste hittest uit te voeren. Ik heb nu al vijandige schepen, maar ik weet niet hoe ik daarop nu die hittest moet uitvoeren, kan iemand me hier even bij helpen ?
/*Dit is de code :*/
EDIT EDIT EDIT: Met het volgende script wordt het eerste object verwijderd, maar daarna krijg ik foutmeldingen en verwijderd het niets meer :