Volledige versie bekijken : Pauze maken in game
Sushi
%Europe/Berlin %351 %2008, 09:25
He allemaal,
Ik probeer een pauze te maken bij me spelletje. En heb deze variabalen aangemaakt in me main :
var lastyspeed;
var lastxspeed;
var pauze = false
var keypressed = false
En deze code staat bij me onenterframe :
if (Key.isDown(Key.UP)) {
if (keypressed == false) {
keypressed = true;
if (pauze == true) {
xspeed = lastxspeed;
yspeed = lastyspeed;
lastxspeed = 0;
lastyspeed = 0;
pauze = false;
}
if (pauze == false) {
lastxspeed = xspeed;
lastyspeed = yspeed;
xspeed = 0;
yspeed = 0;
pauze = true;
}
}
} else {
keypressed = false;
}
Als ik de eerste keer op de toets drukt gaat hij wel op stop, maar de tweede keer gaat hij niet verder :( Wat doe ik verkeerd?
Bedankt alvast :D
TheDutch
%Europe/Berlin %366 %2008, 09:47
Gebruikt de functie trace() om te bekijken tot hoe ver hij komt en wat de waarden zijn van de variables :).
Let vooral op deze IF statement: if (keypressed == false) {}
Sushi
%Europe/Berlin %383 %2008, 10:11
if (Key.isDown(Key.UP)) {
if (keypressed == false) {
trace("if key is false hij word true");
keypressed = true;
if (pauze == true) {
xspeed = lastxspeed;
yspeed = lastyspeed;
lastxspeed = 0;
lastyspeed = 0;
keypressed = false;
pauze = false;
}
if (keypressed == true) {
trace("if key is true hij word false");
keypressed = false;
if (pauze == false) {
lastxspeed = xspeed;
lastyspeed = yspeed;
xspeed = 0;
yspeed = 0;
pauze = true;
}
}
}
}
Hij werkt :) bedankt voor de tip!
Sushi
%Europe/Berlin %391 %2008, 10:24
He nu heb ik bovenstaande code en deze in mijn main swf die de levels inlaad :
var lastyspeed;
var lastxspeed;
var pauze = false
var keypressed = false
Als eerste laad hij de menu in en daarna kies je voor play game, dan komt level 1. Maar al in de menu pakt hij deze waarde, en geeft hij trace aan. dus hij werkt al in mijn menu? Is dat normaal?
Sushi
%Europe/Berlin %408 %2008, 10:48
Hehe soms pakt hij de pauze niet goed, weten jullie misschien hoe dat komt. Soms gaat ie snel van pauze naar niet pauze en dat soort dingen.
Hier kan je het spelletje vinden : BreakOut (http://www.momac.net/test_sue/main.swf)
Jan
%Europe/Berlin %434 %2008, 11:25
Je toont dikwijls te weinig van je script. Ik verwacht althans dat dat stukje van hierboven in een onEnterFrame staat. (wat je aangehaalde probleem zou kunnen verklaren)
Daarenboven moet je even in de help kijken wat het verschil is tussen isDown en onKeyDown en hoe listeners werken. Da's soms handiger dan te luisteren in een onEnterFrame. Die listeners kan je dan ook 'adden' of 'removen' op momenten dat ze niet meer (of weer terug) nodig zijn.
Concreet naar je vraag toe zijn er veel manieren om een pause knop te maken: hieronder staan 2 manieren die exact hetzelfde resultaat opleveren:
var lastxspeed:Number;
var lastyspeed:Number;
var xspeed:Number=10;
var yspeed:Number=10;
var pauze:Boolean=false;
var pauseKnop:Object=new Object();
Key.addListener(pauseKnop);
pauseKnop.onKeyDown=function()
{
if(Key.getCode()==80)//letter P
{
pauze=!pauze
if (pauze)
{
lastxspeed=xspeed;
lastyspeed=yspeed;
xspeed = 0;
yspeed = 0;
}
else
{
xspeed=lastxspeed;
yspeed=lastyspeed;
}
}
}
mc.onEnterFrame=function()
{
this._x+=xspeed;
this._y+=yspeed;
}
var xspeed:Number=10;
var yspeed:Number=10;
var pauze:Boolean=false;
var pauseKnop:Object=new Object();
Key.addListener(pauseKnop);
pauseKnop.onKeyDown=function()
{
if(Key.getCode()==80)//letter P
{
pauze=!pauze
}
}
mc.onEnterFrame=function()
{
if(!pauze)
{
this._x+=xspeed;
this._y+=yspeed;
}
}
Groeten,
http://users.telenet.be/jansurf/cwo.png Jan
Aeronobe
%Europe/Berlin %472 %2008, 12:20
Ook kan je jouw pauze op deze manier "misbruiken",
houdt pauze ingedrukt en kijk wat er gebeurt:
de bal beweegt zich als het ware in slowmotion
de plank om hem terug te slaan beweegt nog altijd normaal.
Ook zijn er soms problemen als je de bal uiterst links of rechts op het scherm terugkaatst,
dan blijft hij namelijk de rand van het spel volgen (al zigzaggend).
Sushi
%Europe/Berlin %478 %2008, 12:28
de plank om hem terug te slaan beweegt nog altijd normaal.
Ja klopt, dat moet ik nog doen. Ging nu puur om het feit, of ik uberhaupt een pauze kon maken door de bal stil te laten staan.
Ook zijn er soms problemen als je de bal uiterst links of rechts op het scherm terugkaatst,
dan blijft hij namelijk de rand van het spel volgen (al zigzaggend).
Ja dat is ook nog een probleem, die ik niet weet op te lossen. Daarnaast gaat de balk soms uit het veld, wat ook niet de bedoeling is.
@ adnez : Ik ga nu eerst ff lezen over die keys en daarna probeer ik jouw code verder toe te passen. Ziet er ook netter uit. maaar ik kan geen gebruik maken van de letter "p" Hoe zeg ik dat hij de pijl om hoog moet doen. ( This namelijk een mobiele game )
Jan
%Europe/Berlin %480 %2008, 12:32
Ook zijn er soms problemen als je de bal uiterst links of rechts op het scherm terugkaatst,
dan blijft hij namelijk de rand van het spel volgen (al zigzaggend).
Ik heb de fla niet bekeken maar meestal is zoiets het gevolg van een hitTest checken in een onEnterFrame: de bal 'raakt' de muur maar gaat er in werkelijkheid een stukje doorheen, op dat moment keer je de snelheid(richting) om zodat de bal terug naar binnen gaat maar tijdens de volgende onEnterFrame check is de bal nog niet terug helemaal 'binnen' en raakt hij de muur nog steeds waardoor je script de richting opnieuw omkeert en hij dus terug richting muur wil gaan en dat blijft zich dan herhalen.
Er zijn verschillende oplossingen hiervoor.
Of je plaatst de bal nadat ie de muur raakt (maar in feit er half doorheen zit) expliciet terug naast de muur aan de binnenkant en keert dan pas de richting/snelheid om of je gebruikt vectoren om je bal te laten bewegen.
Met deze laatste methode bereken je eigenlijk waar de bal na de volgende onEnterFrame zal terechtkomen en als dat te ver is (door de muur) dan gebruik je een vector die ervoor zorgt dat hij maar slechts tot tegen de muur komt.
Deze methode wordt hier piekfijn uitgelegd, welliswaar in AS1 script maar de wiskundige principes blijven hetzelfde:
http://www.tonypa.pri.ee/vectors/start.html
Edit:
Ja dat is ook nog een probleem, die ik niet weet op te lossen. Daarnaast gaat de balk soms uit het veld, wat ook niet de bedoeling is.
Zie uitleg hierboven( geldt ook voor die balk)
in een onEnterFrame:
if(balk._x<0)
{
balk._x=0;
}
if(balk._x>Stage.width-balk._width)
{
balk._x=Stage.width-balk._width
}
@ adnez : Ik ga nu eerst ff lezen over die keys en daarna probeer ik jouw code verder toe te passen. Ziet er ook netter uit. maaar ik kan geen gebruik maken van de letter "p" Hoe zeg ik dat hij de pijl om hoog moet doen. ( This namelijk een mobiele game )
Oeps, niet bij stilgestaan. Maar je kan die '80' in mijn voorbeeld gewoon vervangen door Key.UP of door 38
trace(Key.UP);//38
Groeten,
http://users.telenet.be/jansurf/cwo.png Jan
Sushi
%Europe/Berlin %575 %2008, 14:48
Alles doet het goed nu, maar hoe kan ik ik zeggen dat het een cijfer is ipv pijl omhoog?
Jan
%Europe/Berlin %581 %2008, 14:57
var pauseKnop:Object=new Object();
Key.addListener(pauseKnop);
pauseKnop.onKeyDown=function()
{
trace(Key.getCode())
}
Druk op je cijfer en kijk naar de trace voor de bijhorende code en die gebruik je dan in je if statement ipv 80 of Key.UP.
En anders moet je even de lijst met de key codes zoeken via Google.
Of ze zelf even opvragen via een kort scriptje als:
for(var i:Number=33; i<400; i++)
{
trace("voor " + String.fromCharCode(i) + " kies : if( Key.getCode() == " + i +" )");
}
Groeten,
http://users.telenet.be/jansurf/cwo.png Jan
Sushi
%Europe/Berlin %603 %2008, 15:29
Ik gebruik nu deze code, die overgens goed werkt :
if (keytimer>0) {
keytimer--;
trace("aftellen");
}
if (keytimer<1) {
keypressed = false;
}
if (Key.isDown(Key.UP) && gamestarted == true) {
keytimer = 2;
if (keypressed == false && pauze == false) {
keypressed = true;
pauze = true;
pauze_tekst.text = "PAUZE";
lastxspeed = xspeed;
lastyspeed = yspeed;
xspeed = 0;
yspeed = 0;
}
if (keypressed == false && pauze == true) {
keypressed = true;
pauze = false;
pauze_tekst.text = "";
xspeed = lastxspeed;
yspeed = lastyspeed;
lastxspeed = 0;
lastyspeed = 0;
}
}
En wil dan dit toepassen :
if(Key.getCode()==48)//cijfer 0
ipv
(Key.isDown(Key.UP)
Maar dan werkt het niet meer natuurlijk, hoe kan ik die code toepassen in mijn as?
EDIT :
Als ik dit doe bv :
if (Key.isDown(Key.getCode() == 48) && gamestarted == true) {
Dan geeft hij deze error
**Error** Scene=Scene 1, layer=actions, frame=1:Line 45: Type mismatch.
Jan
%Europe/Berlin %659 %2008, 16:49
Kijk zelf eens wat meer in de help aub.
D'er staat toch in gewone mensentaal beschreven wat je moet invullen op de plaats van de parameter:
code:Number
isDown (Key.isDown method)
public static isDown(code:Number) : Boolean
if (Key.isDown(48))
{
//
}
Groeten,
http://users.telenet.be/jansurf/cwo.png Jan
Sushi
%Europe/Berlin %676 %2008, 17:13
sorry :( ik kijk regelmatig in de help, in dit geval dan niet, spijt me >< Ik ga er mee aan de slag! Wil gewoon zo veel mogelijk leren over as. Dankzij jullie al veel gelukt!
Sushi
%Europe/Berlin %360 %2008, 09:39
if (keytimer>0) {
keytimer--;
}
if (keytimer<1) {
keypressed = false;
}
if ((Key.isDown(48)) && gamestarted == true) {
keytimer = 2;
if (keypressed == false && pauze == false) {
keypressed = true;
pauze = true;
pauze_tekst.text = "PAUZE";
lastxspeed = xspeed;
lastyspeed = yspeed;
xspeed = 0;
yspeed = 0;
}
if (keypressed == false && pauze == true) {
keypressed = true;
pauze = false;
pauze_tekst.text = "";
xspeed = lastxspeed;
yspeed = lastyspeed;
lastxspeed = 0;
lastyspeed = 0;
}
}
Ik heb nu dit, dat werkt perfect :D bedankt voor alle hulp!
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.