所以我有一大堆flash,actionscript3代码,可以作为一个flappybird /射击游戏。 问题是我在代码的最底部做了一个重启按钮,但每次我点击重启按钮,游戏都会自动加速。 所以我所做的所有管道都移动了两倍,等等。 每次使用重启按钮重启游戏时都会发生这种情况。
对不起真的很长的代码,这是为了学校而且想到也许你们中的一个人可以帮助我解决为什么每次我点击de afbutton时它都会保持更快的速度。
不介意评论顺便说一下,它是荷兰语。
这是代码
package
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.events.KeyboardEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class algemeClass extends MovieClip
{
//Hier maak ik alle variablen aan.
var speed:Number;
var fishVel:Number = 0;
var Gravity:Number = 0.75;
var score:int = 0;
var bestscore:int = 0;
//Hier alle Booleans
var End:Boolean = false;
var Pause:Boolean = true;
//Hier alles voor addChild.
var Fish = new myFish ();
var Pipe = new pipe ();
var Pipe1 = new pipe ();
var Pipe2 = new pipe ();
var Pipe3 = new pipe ();
var Pipe4 = new pipe ();
var Pipe5 = new pipe ();
var Pipe6 = new pipe ();
var Pipe7 = new pipe ();
var bubble1 = new bubble ();
var bubble2 = new bubble ();
var bubble3 = new bubble ();
var bubble4 = new bubble();
var haaienLijn = new haaienlijn ();
var scorelijn = new scoreLijn ();
public var afbutton = new afButton ();
//Hier mijn array voor het schieten van de bullets.
var Bullets:Array = new Array ();
var Bullets2:Array = new Array();
var Bullets3:Array = new Array ();
var Bullets4:Array = new Array ();
var Enemies:Array = new Array ();
//Hier komen alle Timers
var AddEnemyTimer:Timer = new Timer(3000);
//Hier alle Numbers/Integres.
public var startbutton =new startButton();
//Variable met random getal
var random1:int = Math.random() * 15;
var random2:int = Math.random() * 15;
var random3:int = Math.random() * 15;
var random4:int = Math.random() * 15;
//CONSTRUCTOR
/*Dit wordt meteen afgespeeld als het spel gestart wordt.
Ik wou hier graag dat er een start knop komt waarna het spel begint */
public function algemeClass()
{
//Hier wordt een startknop aangemaakt.
addChild(startbutton);
//Hier wordt de positie van de startknop bepaalt.
startbutton.x = 275;
startbutton.y = 200;
//Hier voeg ik een eventlistener toe om te luisteren wanneer er op de startbutton wordt geklikt
addEventListener(MouseEvent.CLICK,startGame);
//Dit is de functie voor de hierboven genoemde listener.
function startGame(event:MouseEvent)
{
//als deze functie wordt uitgevoerd. zullen de volgende dingen gebeuren.
//het spel de game wordt gestart.
theGames();
//De eventlistener die naar de startknop luisterd wordt verwijderd
removeEventListener(MouseEvent.CLICK,startGame);
//hier wordt de startknop van de stage verwijdert
if (startbutton.parent)
{
startbutton.parent.removeChild(startbutton);
}
}
}
//DE HEADFUNCTION
function theGames()
{
//EVERY ADDCHILDS
addChild(Pipe);
addChild(Pipe1);
addChild(Pipe2);
addChild(Pipe3);
addChild(Pipe4);
addChild(Pipe5);
addChild(Pipe6);
addChild(Pipe7);
addChild(scorelijn);
addChild(bubble1);
addChild(bubble2);
addChild(bubble3);
addChild(bubble4);
addChild(Fish);
addChild(haaienLijn);
//EVERY POSITION
//Dit is de eerste pijp en die begint buiten het scherm.
Pipe.x = 550;
/*De Y van deze pijp wordt bepaalt door een random getal.
Dit getal wordt bepaalt door de maximale Y positie te nemen die pijp mag zijn
en er dan een random getal tussen 0 en 10*245 bij op te tellen.
Zo kunnen de pijpen van bijna helemaal boven naar bijna helemaal onderaan gaan.*/
Pipe.y = (330 - (Math.floor(Math.random()*330)));
/* hier wordt gezegd dat de tegenhanger van pijp een waar je tussendoormoet dezelfde
Y als pijp 1 heeft alleen dan -800 waardoor het gat ontstaat*/
Pipe1.y = Pipe.y + 800;
//Zie voor pijp en pijp1
Pipe2.y = (330 - (Math.floor(Math.random()*330)));
Pipe2.x = Pipe.x + 250;
//Zie voor pijp en pijp1
Pipe3.y = Pipe2.y + 800;
//Zie voor pijp en pijp1
Pipe4.y = (330 - (Math.floor(Math.random()*330)));
Pipe4.x = Pipe.x + 500;
//Zie voor pijp en pijp1
Pipe5.y = Pipe4.y + 800;
//Zie voor pijp en pijp1
Pipe6.y = (330 - (Math.floor(Math.random()*330)));
Pipe6.x = Pipe.x + 750;
//Zie voor pijp en pijp1
Pipe7.y = Pipe6.y + 800;
/* dit is de scorelijn waar je een punt krijgt als je erdoorheen vliegt
deze heeft een standaar X en Y positie alleen beweegt wel*/
scorelijn.y = 200;
scorelijn.x = 550;
bubble1.x = Math.random() * 550;
bubble1.y = 620;
//Zie bubble1
bubble2.x = Math.random() * 550;
bubble2.y = 620;
//Zie bubble1
bubble3.x = Math.random() * 550;
bubble3.y = 620;
//Zie bubble1
bubble4.x = Math.random() * 550;
bubble4.y = 620;
//startpositie van de vis
Fish.x = 200;
Fish.y = 200;
haaienLijn.x = -50;
haaienLijn.y = 300;
score_txt.text = score.toString();
afbutton.x = 275;
afbutton.y = 200;
//EVERY EVENTLISTENER
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler2);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler3);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler4);
stage.addEventListener(MouseEvent.MOUSE_DOWN,fishSwim);
addEventListener(Event.ENTER_FRAME,Main);
AddEnemyTimer.addEventListener(TimerEvent.TIMER, addEnemy);
afbutton.addEventListener(MouseEvent.CLICK,onAfButton);
//THE MAIN FUNCTIE
function Main(event:Event):void
{
bubbleMove();
pipeMove();
scoreSchrijf();
Oneindig();
Jump();
Shooting();
Shooting2();
Shooting3();
Shooting4();
moveEnemies();
checkCollisions();
checkCollisions2();
checkCollisions3();
checkCollisions4();
checkCollisions5();
checkcollisions6();
Af();
}
//FUNCTION BUBBLEMOVE
//In dit gedeelte zal alles van de bubbles bepaalt worden.
function bubbleMove():void
{
/* De Y posities van de bubbles worden bepaalt door eerst te zeggen welke y de bubbles hebben
hierna zeg ik dat de nieuwe Y van de bubbles moet worden bepaalt door de hele tijd het random
gegenereerde getal van hierboven er van aftehalen waardoor de bubbel naar boven gaat*/
bubble1.y = bubble1.y - random1;
bubble2.y = bubble2.y - random2;
bubble3.y = bubble3.y - random3;
bubble4.y = bubble4.y - random4;
/*In dit stuk code wordt gezegd dat als de bubbel boven het scherm komt hij een nieuwe Y snelheid
zoals hier boven onderaan het scherm wordt geplaatst en een nieuwe random X Positie*/
if (bubble1.y < 0)
{
bubble1.x = Math.random() * 550;
bubble1.y = 620;
}
if (bubble2.y < 0)
{
bubble2.x = Math.random() * 550;
bubble2.y = 620;
}
if (bubble3.y < 0)
{
bubble3.x = Math.random() * 550;
bubble3.y = 620;
}
if (bubble4.y < 0)
{
bubble4.x = Math.random() * 550;
bubble4.y = 620;
}
}
//FUNCTION PIPEMOVE
/* bij deze eventlistener zullen alle pijpen en scorelijnen gaan bewegen*/
function pipeMove():void
{
//De standaard snelheid van alle onderdelen is -4
Pipe.x = Pipe.x - 4;
//alle tegenhagende pijpen krijgen de zelfde X als de tegenhanger.
Pipe1.x = Pipe.x;
Pipe2.x = Pipe2.x - 4;
Pipe3.x = Pipe2.x;
Pipe4.x = Pipe4.x - 4;
Pipe5.x = Pipe4.x;
Pipe6.x = Pipe6.x - 4;
Pipe7.x = Pipe6.x;
scorelijn.x = scorelijn.x - 4;
}
//FUNCTION SCORESCHIJF
//Hier zal worden bepaalt of er sprake is van een score
function scoreSchrijf():void
{
/* Hier wordt gezegd dat als de vis met object in aanraking komt er +1 bij de score moet komen
nadat dat is gebeurt moet de X van de lijn naar 275 naar links gaan
DIt getal 275 is het getal tussen de buizen. Dus elke keer als je door de lijn gaat
zal de lijn naar de volgende buis gaan en kun je hier ook scoren.*/
if (Fish.hitTestObject(scorelijn))
{
score = score + 1;
scorelijn.x = scorelijn.x + 250;
}
//Hier wordt de score omgezet voor het textvak en daar weergegeven
score_txt.text = score.toString();
}
//FUNCTION PIJPEN BLIJVEN GAAN
//Deze wordt toegevoegd om ervoor te zorgen dat alles door blijft gaan.
function Oneindig():void
{
/*er wordt hier gezegd dat als de pijp buiten het scherm verdwijnt hij weer een nieuwe
random Y positie moet krijgen en dat de tegenhangende pijp weer het gat moet maken.
De X positie van de buis wordt bepaalt door hem +275 achter de laatste buis te plaatsen
hierdoor zal hij de hele tijd terugkomen aangezien dit met elke buis gebeurd.
dus als buis 0/1 buiten het scherm gaan komen ze 275 achter 6/7
als 2/3 buiten het scherm komt komt hij achter de pijp 0/1, ze komen dan dus de hele tijd
achter hun voorganger aan.*/
if (Pipe.x <= -100)
{
Pipe.y = (330 - (Math.floor(Math.random()*330)));
Pipe.x = Pipe6.x + 250;
Pipe1.y = Pipe.y + 800;
}
if (Pipe2.x <= -100)
{
Pipe2.y = (330 - (Math.floor(Math.random()*330)));
Pipe2.x = Pipe.x + 250;
Pipe3.y = Pipe2.y + 800;
}
if (Pipe4.x <= -100)
{
Pipe4.y = (330 - (Math.floor(Math.random()*330)));
Pipe4.x = Pipe2.x + 250;
Pipe5.y = Pipe4.y + 800;
}
if (Pipe6.x <= -100)
{
Pipe6.y = (330 - (Math.floor(Math.random()*330)));
Pipe6.x = Pipe4.x + 250;
Pipe7.y = Pipe6.y + 800;
}
}
//FUNCTION JUMPEN
//hier wordt de gravity voor de vis bepaalt
function Jump():void
{
//hier wordt gezegd dat de Y van de vis de hele tijd + fishVel (fishvelocity) gaat en dit is eerst 0
Fish.y = Fish.y + fishVel;
/* hier wordt de fishvel bepaald door de hele tijd gravity erbij op te tellen dus hij stal steeds
sneller naar beneden gaan vallen*/
fishVel = fishVel + Gravity;
}
//Als je klikt maak je de Fishvel -11 waarna hij steeds weer -8 gaat doen. hij schiet dus heel even omhoog
//FUNCTION GRAVITY VAN DE VIS
function fishSwim(event:MouseEvent):void
{
fishVel = -11;
}
//FUNCTION VOOR HET REAGEREN OP SCHIETEN
//Hier registreert hij of je het knopje wat ik aangeef inklikt
function keyDownHandler(keyEvent:KeyboardEvent):void
{
//keyCode geeft aan om welk knopje het gaat
if (keyEvent.keyCode == 68)
{
//Dus als je het knopje van die functie indrukt gebeurt de functie shootbullet
shootBullet();
}
}
//FCUNTION VOOR HET MAKEN VAN SCHIETEN
//dit is de functie shootbullet
function shootBullet():void
{
//eerst maak je nieuwe bullets in de array aan
var Bullet:bullet = new bullet();
//daarna zeg ik dat de start positie van de bullet hetzelfde als de vis moet zijn
Bullet.x = Fish.x + 25;
Bullet.y = Fish.y;
//Hier wordt een bullet aan de stage toegevoegd
addChild(Bullet);
//en hier drukt hij de vorige bullet verder in de array
Bullets.push(Bullet);
}
//FUNCTION VOOR DOEN VAN HET SCHIETEN
function Shooting():void
{
/* hier gebruik ik een for loop om te bepalen dat wanneer b kleiner is dan de arrays lenght
de loop wil blijven gaan.
bij de b maak je gewoon een variable aan.
de hele tijd moet hij b++ omdat door de array heen, zodat je de hele tijd door de bullets
in de array kan komen */
for (var b:int = 0; b < Bullets.length; b++)
{
//dit is de functie voor het bewegen van de bullet
Bullets[b].x += 10;
//hier wordt gezegd dat als de bullet buiten de stage komt hij moet worden verwijderd
if (Bullets[b].x > stage.stageWidth)
{
removeChild(Bullets[b]);
Bullets[b] = null;
Bullets.splice(b,1);
}
}
}
//FUNCTION VOOR HET REAGEREN OP SCHIETEN2
/* ALLE COMMENTS IN DE FUNCTIE HIERBOVEN VAN HET HELE SCHIETEN GELDEN OOK VOOR DE 3 FUNCTIER HIERONDER*/
function keyDownHandler2(keyEvent2:KeyboardEvent):void
{
if (keyEvent2.keyCode == 65)
{
shootBullet2();
}
}
//FCUNTION VOOR HET MAKEN VAN SCHIETEN2
function shootBullet2():void
{
var Bullet:bullet = new bullet();
Bullet.x = Fish.x + 25;
Bullet.y = Fish.y;
addChild(Bullet);
Bullets2.push(Bullet);
}
//FUNCTION VOOR HET DOEN VAN SCHIETEN2
function Shooting2():void
{
for (var b:int = 0; b < Bullets2.length; b++)
{
Bullets2[b].x -= 10;
if (Bullets2[b].x > stage.stageWidth)
{
removeChild(Bullets2[b]);
Bullets2[b] = null;
Bullets2.splice(b,1);
}
}
}
//FCUNTION VOOR HET REAGEREN VAN SCHIETEN3
function keyDownHandler3(keyEvent3:KeyboardEvent):void
{
if (keyEvent3.keyCode == 87)
{
shootBullet3();
}
}
//FUNCTION VOOR HET MAKEN VAN SCHIETEN3
function shootBullet3():void
{
var Bullet:bullet = new bullet ();
Bullet.x = Fish.x + 25;
Bullet.y = Fish.y;
addChild(Bullet);
Bullets3.push(Bullet);
}
//FCUNTION VOOR HET DOEN VAN SCHIETEN3
function Shooting3():void
{
for (var b:int = 0; b < Bullets3.length; b++)
{
Bullets3[b].y -= 10;
if (Bullets3[b].Y > stage.stageHeight)
{
removeChild(Bullets3[b]);
Bullets3[b] = null;
Bullets3.splice(b,1);
}
}
}
//FCUNTION VOOR HET REAGEREN VAN SCHIETEN4
function keyDownHandler4(keyEvent4:KeyboardEvent):void
{
if (keyEvent4.keyCode == 83)
{
shootBullet4();
}
}
//FCUNTION VOOR HET MAKEN VAN SCHIETEN4
function shootBullet4():void
{
var Bullet:bullet = new bullet();
Bullet.x = Fish.x + 25;
Bullet.y = Fish.y;
addChild(Bullet);
Bullets4.push(Bullet);
}
//FUNCTION VOOR HET DOEN VAN SCHIETEN4
function Shooting4():void
{
for (var b:int = 0; b < Bullets4.length; b++)
{
Bullets4[b].y += 10;
if (Bullets4[b].x > stage.stageWidth)
{
removeChild(Bullets4[b]);
Bullets4[b] = null;
Bullets4.splice(b,1);
}
}
}
//hier laat ik de timer starten;
AddEnemyTimer.start();
//FUNCITON VOOR HET SPAWNEN VAN ENEMIES
//deze functie zorgt ervoor dat er enemys spawnen;
function addEnemy(event:TimerEvent):void
{
//Dit zorgt ervoor dat er nieuwe enemies aan de array worden toegevoegd
var monster:Enemy = new Enemy();
//hier wordt de startwaarde van de enemies bepaald
monster.x = stage.stageWidth + 200;
monster.y = (500 - (Math.floor(Math.random()*400)));
//hier wordt de enemy toegevoegd
addChild(monster);
//en hier wordt hij door geduwd in de array
Enemies.push(monster);
}
//FUNCTION VOOR HET BEWEGEN VAN ENEMIES
function moveEnemies():void
{
for (var a:int = 0; a < Enemies.length; a++)
{
Enemies[a].x -= 2;
if (Enemies[a].x < -50)
{
removeChild(Enemies[a]);
Enemies[a] = null;
Enemies.splice(a,1);
}
}
}
//FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY
function checkCollisions():void
{
for (var b = Bullets.length -1; b >= 0; b--)
{
for (var a = Enemies.length -1; a >= 0; a--)
{
if (Bullets[b].hitTestObject(Enemies[a]))
{
removeChild(Bullets[b]);
Bullets[b] = null;
Bullets.splice(b,1);
removeChild(Enemies[a]);
Enemies[a] = null;
Enemies.splice(a,1);
score = score + 5;
break;
}
}
}
}
//FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY
function checkCollisions2():void
{
for (var b = Bullets2.length -1; b >= 0; b--)
{
for (var a = Enemies.length -1; a >= 0; a--)
{
if (Bullets2[b].hitTestObject(Enemies[a]))
{
removeChild(Bullets2[b]);
Bullets2[b] = null;
Bullets2.splice(b,1);
removeChild(Enemies[a]);
Enemies[a] = null;
Enemies.splice(a,1);
score = score + 5;
break;
}
}
}
}
//FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY
function checkCollisions3():void
{
for (var b = Bullets3.length -1; b >= 0; b--)
{
for (var a = Enemies.length -1; a >= 0; a--)
{
if (Bullets3[b].hitTestObject(Enemies[a]))
{
removeChild(Bullets3[b]);
Bullets3[b] = null;
Bullets3.splice(b,1);
removeChild(Enemies[a]);
Enemies[a] = null;
Enemies.splice(a,1);
score = score + 5;
break;
}
}
}
}
//FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY
function checkCollisions4():void
{
for (var b = Bullets4.length -1; b >= 0; b--)
{
for (var a = Enemies.length -1; a >= 0; a--)
{
if (Bullets4[b].hitTestObject(Enemies[a]))
{
removeChild(Bullets4[b]);
Bullets4[b] = null;
Bullets4.splice(b,1);
removeChild(Enemies[a]);
Enemies[a] = null;
Enemies.splice(a,1);
score = score + 5;
break;
}
}
}
}
//FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY
function checkCollisions5():void
{
for (var a = Enemies.length -1; a >= 0; a--)
{
if (Enemies[a].hitTestObject(Fish))
{
clearing();
addChild(afbutton);
}
}
}
//FUNCTION VOOR HET CHECKEN VAN COLLISION TUSSEN BULLET EN ENEMY
function checkcollisions6():void
{
for (var a = Enemies.length -1; a >= 0; a--)
{
if (Enemies[a].hitTestObject(haaienLijn))
{
clearing();
addChild(afbutton);
}
}
}
//FUNCTION VOOR WANNEER JE AF BENT
function Af():void
{
if (Fish.y < 0)
{
clearing();
}
if (Fish.y > 600)
{
clearing();
}
if (Fish.hitTestObject(Pipe))
{
clearing();
}
if (Fish.hitTestObject(Pipe1))
{
clearing();
}
if (Fish.hitTestObject(Pipe2))
{
clearing();
}
if (Fish.hitTestObject(Pipe3))
{
clearing();
}
if (Fish.hitTestObject(Pipe4))
{
clearing();
}
if (Fish.hitTestObject(Pipe5))
{
clearing();
}
if (Fish.hitTestObject(Pipe6))
{
clearing();
}
if (Fish.hitTestObject(Pipe7))
{
clearing();
}
}
//FUNCITON DIE ALLE EVENTLISTENERS VERWIJDERT
function clearing():void
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler2);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler3);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler4);
stage.removeEventListener(MouseEvent.MOUSE_DOWN,fishSwim);
removeEventListener(Event.ENTER_FRAME,Main);
AddEnemyTimer.stop();
AddEnemyTimer.reset();
AddEnemyTimer.removeEventListener(TimerEvent.TIMER, addEnemy);
addChild(afbutton);
}
//FUNCTION VOOR HET KLIKKEN OP DE RESTART KNOP
function onAfButton(event:MouseEvent)
{
if (afbutton.parent)
{
afbutton.parent.removeChild(afbutton);
removeEventListener(MouseEvent.CLICK,onAfButton);
}
theGames();
if (score > bestscore)
{
bestscore = score;
}
highscore_txt.text = "Highscore : " + bestscore.toString();
score = 0;
}
}
}
}
答案 0 :(得分:0)
我不确定这对我使用Javascript而不是Actionscript有多大帮助,但我几乎可以保证你的问题是由你对敌人的计时器造成的。我会确保你在重新启动时正确地移除计时器。
答案 1 :(得分:0)
我假设当你的角色遇到管道等时,af()函数会重置游戏。
看来你的onAFButton功能实际上并没有重置任何东西 - 它只是调用游戏()来重建游戏!
结果,你告诉你所有的物品再次设定它们的速度,这将是之前的两倍。