Volledige versie bekijken : probleem toetsenbord besturing
Asdfnl
%Europe/Berlin %841 %2006, 21:11
Ik ben weer even aan het klooien om AS een beetje onder de knie te krijgen.
Ik heb nu op de main timeline een MC genaamt lopen.
In die MC "lopen" heb ik 3 keyframes staan met daaronder bij alledrie een stop(); actions.
op elke keyframe staat een manier van lopen in weer aparte MC's: links, rechts en stilstaand.
nu heb k deze code gebruikt:
movespeed = 4;
this.onEnterFrame = function(){
if(Key.isDown(Key.LEFT)){
lopen.gotoAndPlay(2);
lopen._x -= movespeed;
}
if(Key.isDown(Key.RIGHT)){
lopen.gotoAndPlay(33);
lopen._x += movespeed;
}
}
Het werkt keurig als ik links druk begint mn figuur naar links te lopen en vise versa(:P).
Het probleem is echter dat als ik de linker of rechter toets op mn toetsenbord los laat dat en mc's van links of rechts gewoon door blijven gaan. dat is opzich logisch als je naar de code kijkt... maaar als ik bij de if statements nog een else doet bewegen die mc's op de één of andere manier niet meer...
misschien heeft iemand een oplossing:O
bvd
Tim
M0L
%Europe/Berlin %870 %2006, 21:53
laat dat dan eens zien met die if en else constructie.
Neuro
%Europe/Berlin %883 %2006, 22:12
het is eigenlijk heel simpel :)
movespeed = 4;
this.onEnterFrame = function(){
if(Key.isDown(Key.LEFT)){
lopen.gotoAndPlay(2);
lopen._x -= movespeed;
}
else if(Key.isDown(Key.RIGHT)){
lopen.gotoAndPlay(33);
lopen._x += movespeed;
}
else{lopen.gotoAndStop(1);}//naar de frame waar het figuurtje stilstaat(of eventueel gotoAndPlay naar de stop animatie)
}
Asdfnl
%Europe/Berlin %928 %2006, 23:17
donders elke keer weer één zo'n klein woordje hè:P
else(lopen.gotoAndStop(1));
had ik er al onder toen gaf ie die fouten!
maar ik had niet die else bij:
else if(Key.isDown(Key.RIGHT)){
lopen.gotoAndPlay(33);
lopen._x += movespeed;
}
staan...stomstomstom...maar kun je misschien een beetje uitleggen waarom het daar nou precies else en if moet zijn.
edit: hij werkt nu wel trouwens! bedankt Neuro
Emveedee
%Europe/Berlin %932 %2006, 23:22
Nou,
als je op deze manier else if gebruikt,
heeft naar links lopen (in dit geval) voorrang op naar rechts lopen.
Zo krijg je dus ook niet dat als je links en rechts tegelijk inhoud,
dat je stilstaat ;)
En nu kun je met die else op het einde zorgen dat ie weer naar zn normale houding teruggaat.
Dauntless
%Europe/Berlin %935 %2006, 23:26
Bij games mag je nooit direct op de _x en _y werken. Werk gedurende al je berekeningen met een 'x en y' variabele en op het einde van de frame stel je de _x en _y gelijk aan x en y.
Dit houdt dus in:
var hero:MovieClip;
var speed:Number = 10;
this.onEnterFrame = function() {
var x:Number = hero._x;
var y:Number = hero._y;
if (Key.isDown(Key.LEFT)) {
x -= speed;
}
if (Key.isDown(Key.RIGHT)) {
x += speed;
}
hero._x = x;
hero._y = y;
};
Emveedee
%Europe/Berlin %935 %2006, 23:27
En waarom dat?
(wist ik dus niet.. :l)
Dauntless
%Europe/Berlin %937 %2006, 23:30
Omdat al je wijzigingen direct visueel zijn voor de speler.
Ik zal even snel 2 files maken ;). Hold on!
Dauntless
%Europe/Berlin %945 %2006, 23:41
Vergelijk:
http://www.dauntless.be/flashfocus/fallingballs.swf
Neuro
%Europe/Berlin %276 %2006, 07:38
@Asdfnl:het is gewoon een beetje logica: als je maar een keer else gebruikt
slaagt die else enkel maar op de vorige if, met de if, else if , else worden de 3
vergelijkingen in rekening gebracht. Mmm klinkt een beetje verwarrend maar zoiets is het toch :)
@Dauntless: het is idd een erg goede oplossing voor het voorang probleem en bv een hittest en het is in het algemeen ook een betere methode
maar de methode van Asdfnl is toch ook zichtbaar in de frame zelf? of vergis ik mij? :)
Dauntless
%Europe/Berlin %314 %2006, 08:32
@Dauntless: het is idd een erg goede oplossing voor het voorang probleem en bv een hittest en het is in het algemeen ook een betere methode
maar de methode van Asdfnl is toch ook zichtbaar in de frame zelf? of vergis ik mij? :)
Wat bedoel je ? :#
Emveedee
%Europe/Berlin %448 %2006, 11:46
@Neuro,
als je goed kijkt naar het voorbeeld van dauntless,
zie je dat de bal links eerst een stukje over de zwarte
balk heen schuift, en daarna terugschiet. Bij die
andere is dat niet zo ;)
Asdfnl
%Europe/Berlin %641 %2006, 16:23
@ neuro wederom bedankt voor je uitleg:D
@Dauntless, het wordt niet voor een game gebruikt:D maar voor navigatie met behulp van een lopende figuur...
En ik snap ook nog niet egt veel van AS dus van dat stukje wat je liet zien snappik ook niet zoveel :# maar ik snap wel wat je bedoeld:D
edit:
dit is het trouwens geworden http://home.student.uva.nl/tim.remmers/lopenmenu.html
voor mn gevoel werkt ie wel okay nu:O.
het is me ook gelukt om er voor te zorgen dat als je doorloopt het beeld uit met het mannetje dat je aan de andere kant weer tevoorschijn komt:D:P
dit hebbik met behulp van een hitTest gedaan :# ik heb gewoon blokjes neergezet aan de zijkanten en zogouw de figuur die blokjes aanraakte veranderen de x en y.... misschien een hele domme opzet om het zo te doen maar het werkt wel:D:P.
misschien weet iemand hoe je dat bter kan doen?:O
mzzl
edit2: ik gebruik veel teveel smilies in mn teksten... [V]
Emveedee
%Europe/Berlin %652 %2006, 16:39
Nou vrij eenvoudig:
Je kijkt wat de _x is van je mannetje als hij de 'mist' inloopt,
en dan kun je makkelijk met een if statement hem aan de andere kant zetten.
var links:Number = 10; // hier de _x van je mannetje als hij links tegen t blok loop
var rechts:Number = 10; // hier de _x van je mannetje rechts
// dit in diezelfde onEnterFrame zetten:
if(mannetje._x < links) mannetje._x = rechts;
if(mannetje._x > rechts) mannetje._x = links;
// wel ff instancenaam aanpassen :)
Asdfnl
%Europe/Berlin %655 %2006, 16:43
thnQ:P weer zo simpel:O:D
oh w8....k heb het wel ongeveer zo gedaan :#
die hitTest stond er maar voor jan l*l bij 8~
if(lopen._x < -110){
lopen._x = 560;
lopen._y = 320;
}
het enige wat anders is, is dat k geen variabelen gebruikt heb...maar dat is opzich niet zo erg toch?:O
Asdfnl
%Europe/Berlin %669 %2006, 17:04
ohnee... het werkt niet zonder mn hitTest...:(
want als mn figuur naar rechts wordt gestuurd is de _x dus weer groter en dan stuurt ie m automatisch weer naar links omdat de _x groter is:P en andersom ook...
Emveedee
%Europe/Berlin %678 %2006, 17:17
In principe moet dat werken hoor ;)
Die variabelen maakt niets uit.
Volgens mij heb je de _x van je blok gepakt,
maar je moet de _x van je blok + de breedte pakken.
Zet je fla eens online dan kijk ik er naar.
Btw: T ziet er vet goed uit, je mannetje! (loop animatie is echt smooth :D)
Asdfnl
%Europe/Berlin %744 %2006, 18:52
tis al gefixt :) maar bedankt iig
Emveedee
%Europe/Berlin %902 %2006, 22:39
Okee :)
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.