Hej. Dette er mit først indlæg. Jeg er ikke super erfaren med AS3, men jeg er ved at lave et shooter spil hvor man kaster med kebabruller. Problemet er at når mit inventory siger at jeg har 0 kebabruller skal det ikke være muligt at kaste med noget. Men den kaster med uanset om den står 0, under 0 eller over 0 så kaster den stadig. Her er min kode:
if (action == true %% kebab_txt <= 0 )) {
player_mc.gotoAndPlay("start");
}
else {
kastekebab_mc.gotoAndStop(1);
kastekebab_mc.x = player_mc.x;
kastekebab_mc.y = player_mc.y;
player_mc.gotoAndPlay("start");
kastekebab_mc.gotoAndPlay("start");
}
Forklaring af kode:
action = Hvis SPACE er trykket ned.
player_mc.gotoAndPlay("start"); = Bevæg figurens arm.
kastekebab_mc.gotoAndStop(1); = Reset kebabbens movieclip.
Jeg håber at nogen kan hjælpe mig. På forhånd mange tak!
11 kommentarer
prøv i din if sætning:
Og velkommen til forummet
Funktionen int() var uddateret i AS1 allerede i Flash 6, så det ville være en fjollet idé at bruge den i dag til noget som helst (andet end Flash 5 produktioner).
Den globale funktion parseInt() er hvad du bør bruge som i "... parseInt(kebab_txt.text) <= 0", men du kunne i virkeligheden lige så godt skrive if kebab_txt.text == "0".
Det pæneste ville være at lave din egen variabel "antal_kebabs" som var en uint og som du talte ned til 0 - og så skulle du bare sørge for at hver gang du ændrede den, så opdaterede du også tekstfeltet.
Derudover mistænker jeg at dine procent-tegn blot er en mindre tastefejl - det skulle vist have været &-tegn
Mange tak for jeres svar.
Jeg har lavet en variabel der hedder kebab, og som udgangspunkt står den til at være på 0. Og så skal man så samle kebab op for at få ammunition.
var kebab:Number = 0;
Og så har jeg min kode her:
if (action && kebab <= 0 ) {
player_mc.gotoAndPlay("play");
}
else {
kastekebab_mc.gotoAndStop(1);
kastekebab_mc.x = player_mc.x;
kastekebab_mc.y = player_mc.y;
player_mc.gotoAndPlay("start");
kastekebab_mc.gotoAndPlay("start");
kebab -= 1;
kebab_txt.text = kebab.toString();
}
Det virker dog stadig ikke. Han kan stadig kaste med kebab, selvom kebab-variablen står på 0.
prøv at ændre && til || .. tror det er det du vil egentlig. sådan at når han enten er i action eller ikke har flere kebab's ikke kaster nogen.
@barklund livedocs. Casting med int() er ikke forældet. parseInt() kan bare noget mere, når det kommer til casting a strings som eksempelvis hexadecimal tal eller andre tal systemer end 10 tal's systemet som kræver at man bruger bogstaver. Kan desuden forestille mig at parseInt() er en del langsommere da den rent faktisk returnere Number istedet for int, hvilket rent faktisk gør at den skal type castes en gang til.
Jeg har fået det til at virke nu. Mange tak for jeres hjælp! Nu er der bare et andet problem hæhæ
Når jeg trykker på min actionknap (SPACE), så skal jeg trykke meget hurtigt ellers skyder den mere end 1 kebab af ad gangen. Har i nogen idé om hvad jeg kan gøre for at den kun skyder 1 kebab af for hver gang jeg trykker på space-tasten?
hvis du lytter på key down og key up event og så tjekker på en boolean, sådan her:
På denne måde checker du om space allerede er nede når funktionen bliver kaldt.
Nu har jeg sat det her ind nederst i mit script:
function throwKebab(event:KeyboardEvent):void
{
// check if space already is down
if(action) {
return;
}
// register that we are pressing space
if(event.keyCode == Keyboard.SPACE) {
action = true;
}
// kast din kebab som du plejer herefter
if (action && kebab >= 1) {
kastekebab_mc.x = player_mc.x;
kastekebab_mc.y = player_mc.y + 20;
kastekebab_mc.gotoAndPlay("start");
kebab -= 1;
kebab_txt.text = kebab.toString();
}
}
function registerKeyUp(event:KeyboardEvent):void
{
// register that we no longer is pressing space
if(event.keyCode == Keyboard.SPACE)
action = false;
}
Er det sådan jeg skal gøre? Beklager at jeg ikke er så skarp, men jeg er forholdsvis ny til ActionScript3
@fedlarm: freaky at genintroducere en global casting-funktion under samme navn navn, som en defunct funktion, der lavede ravage i gamle dage.
@frogman: ingen grund til at have en variabel der husker om space er nede eller lytte på, hvornår space er sluppet. Hvis du vil skyde én gang når space trykkes ned, så lyt efter KeyboardEvent.KEY_DOWN og hvis det netop er space der er trykket på, kast én banan. Jeg gætter på du har en KEY_UP og DOWN listener og sætter en variabel og andetsteds har du en enterframe. Ingen grund til en enterframe eller hvad der måtte kaste de der bananer, når du kan gøre det hele i din callback.
Fedt! Det virker helt perfekt nu. Mange tak for alt jeres input, det har været en kæmpe hjælp. Det er sansynligvis ikke sidste gang jeg skriver herinde hæhæ
Og ja, jeg havde helt rigtigt sat koden inde i en ENTER.FRAME, men da jeg rykkede det til min KEY.DOWN event, så virkede det som det skulle.
Mange tak skal i have.
Så er den gal igen!
Jeg skal til at lave en highscore liste, men jeg ved ikke hvordan jeg sender info fra min score variabel til en anden frame?
Altså når man rammer målet bliver man sendt til en anden frame hvor jeg har mit slutscenarie, men jeg har ingen idé om hvordan jeg får min score variabel med videre til slutscenariet.
Jeg håber at i kan hjælpe mig.
Den er der allerede. En tidslinjevariabel (sat direkte på en frame i en tidslinje) bevares på tværs af alle frames i tidslinjen. Så den hedder det samme som i den forrige frame