einrichten eines timer in flash as3
Habe ich ein Projekt durch, in einer Woche, und ich habe fast abgeschlossen. Ich habe noch eine Frage ich muss arbeiten, und ich bin ratlos.
Ich füge den code habe ich so weit unten.
Wenn du könntest auch erklären, was der code tut, damit ich weiß, was es tut, wenn es nicht zu viel Mühe, der code wurde aus einem in der Klasse activity und ich habe die Identifikatoren übereinstimmen, was meine Grafiken aufgerufen werden.
Ich bin versucht zu implementieren, die ein timer in meinem drop und Fang Spiel, das alle 15 Sekunden, erhöht sich die Geschwindigkeit der fallenden Objekte. Der Zeitgeber wird gestartet, aus 60 Sekunden, und wenn es trifft, 0 Sekunden, es sollte gehen, auf einer separaten Seite.
Könnte mir bitte jemand erklären, wie ich dies tun? Ich bin nicht so gut im verstehen der code im flash, also wenn Sie könnte, halten Sie es so einfach wie möglich wäre ich sehr dankbar.
Den code den ich habe ist wie folgt. Es funktioniert perfekt, nur muss ich ändern, einen Bereich, in dem der timer :
package {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.utils.Timer;
import flash.utils.getDefinitionByName;
public class CatchingGame extends MovieClip {
var catcher:Catcher;
var nextObject:Timer;
var objects:Array = new Array();
var score:int = 0;
const speed:Number = 7.0;
public function CatchingGame() {
catcher = new Catcher();
catcher.y = 350;
addChild(catcher);
setNextObject();
addEventListener(Event.ENTER_FRAME, moveObjects);
}
public function setNextObject() {
nextObject = new Timer(1000+Math.random()*1000,1);
nextObject.addEventListener(TimerEvent.TIMER_COMPLETE,newObject);
nextObject.start();
}
public function newObject(e:Event) {
var goodObjects:Array = ["Circle1","Circle2"];
var badObjects:Array = ["Square1","Square2"];
if (Math.random() < .5) {
var r:int = Math.floor(Math.random()*goodObjects.length);
var classRef:Class = getDefinitionByName(goodObjects[r]) as Class;
var newObject:MovieClip = new classRef();
newObject.typestr = "good";
} else {
r = Math.floor(Math.random()*badObjects.length);
classRef = getDefinitionByName(badObjects[r]) as Class;
newObject = new classRef();
newObject.typestr = "bad";
}
newObject.x = Math.random()*500;
addChild(newObject);
objects.push(newObject);
setNextObject();
}
public function moveObjects(e:Event) {
for(var i:int=objects.length-1;i>=0;i--) {
objects[i].y += speed;
if (objects[i].y > 400) {
removeChild(objects[i]);
objects.splice(i,1);
}
if (objects[i].hitTestObject(catcher)) {
if (objects[i].typestr == "good") {
score += 5;
} else {
score -= 1;
}
if (score < 0) score = 0;
scoreDisplay.text = "Score: "+score;
removeChild(objects[i]);
objects.splice(i,1);
}
}
catcher.x = mouseX;
}
}
}
vielen Dank für die Zeit nehmen, zu Lesen, mein Problem und jede Hilfe gegeben
speed
variable, Sie ll wollen ein var
kein const
, für den Anfang. Hier ist eine Anleitung, die timer
- Klasse in AS3: republicofcode.com/tutorials/flash/as3timerInformationsquelleAutor | 2013-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du willst also einen timer, ticks alle 15 Sekunden für 60 Sekunden. Das heißt, es wird auf tick 4 mal (
60 /15
). Nennen wir esspeedTimer
;Sie haben zu instanziieren, es etwas wie das:
Dann müssen Sie zwei verschiedene Ereignis-Listener. Eine, die aufgerufen wird, jedes mal, wenn der timer "tickt", und eine, die aufgerufen wird, wenn es anhält.
In der ersten event-handler-Sie erhöhen den Wert des
speed
. Dass es möglich ist, werden Sie brauchen, um es zu ändern aus einer Konstanten eine variable.In der zweiten handler, setzen Sie Ihre code, um zu gehen zu einer anderen Seite.
Gibt es einige Punkte, die sollten erwähnt werden:
Wenn Sie eine variable deklarieren, sollten Sie einen Bereich angeben (z.B. privat, öffentlich, etc.) auf die gleiche Weise tun, die für Ihre Funktionen:
Wenn Sie deklarieren eine Funktion, sollten Sie angeben einen Wert zurück, mit Ausnahme der Konstruktor Ihrer Klasse. Wenn die Funktion nichts zurückgibt, die Sie verwenden können, void:
Benennung ist wichtig, vor allem, um zu verstehen, Ihrem code, wenn Sie es später Lesen würde. Wenn Sie eine
Timer
ist es besser, nennen Sie es so etwas wiemyTimer
eher alsnextObject
.Dies ist das gleiche für function-Namen:
setNextObject()
erstellt eine neueTimer
und startet es, so würde ich es nennenstartTimer()
.Beim erstellen eines neuen Timers wie diese:
Geben Sie eine Anzahl von Wiederholungen der 1. Das bedeutet, dass Ihre timer Stoppt nach der Verzögerung erfüllt ist. Weil Sie es wollen, laufen Sie über und über wieder, sollten Sie stattdessen geben Sie einem repeatCount von
0
(unendlich).Halten die functionnality, dass Ihre timer-tick auf zufällige Intervall, werden Sie dann brauchen, um einen neuen delai Wert in der Ereignisprozedur
goodObjects
undnadObjects
werden niemals geändert, so sollten Sie extrahieren Sie Sie in der Konstanten:Mit all diesen änderungen sollte es jetzt einfacher sein, zu verstehen, was dein code tut. Hier ist der aktualisierte code:
Wenn es noch einen Teil, der Sie nicht verstehen, fühlen Sie bitte sich frei, zu erwähnen Sie im Kommentar
Du bist herzlich willkommen. Bitte berücksichtigen Sie akzeptieren meine Antwort, wenn es Ihre Frage beantwortet.
ich habe noch ein weiteres Problem, mein code ist wie folgt, im Versuch, entfernen Sie die Objekte von der Bühne, um eine Förderung Bildschirm für den Artikel, ich bin die Förderung für das Projekt. (die Frage, die ich denke, ist das vorletzte Stück code in dem code unten
implementierte ich den code wie oben, aber ich habe ein Problem wo ich bin versucht, entfernen Sie alle Objekte von der Bühne und bewegen sich auf einer promotion-Schirm in meiner Bibliothek, ich habe versucht, die Förderung Bildschirm einen Film-clip, aber das Schrauben bis ich den code habe. der code, den ich haben sich zu bewegen auf dem Bildschirm, was nicht funktioniert ist wie folgt: //wenn der score erreicht letzten 100 wenn(Partitur > 100) { var promotionScreen:Aktion = new Aktion; gotoAndStop("score") addChild(promotionScreen); } //Ende der if-Anweisung
InformationsquelleAutor duTr
Erklären
speed
als variable anstelle vonconst
, sonst wird dein code nicht ändern Sie dessen Wert. Sie können initialisieren der Variablen, sovar speed:Number=7.0
gültig ist.InformationsquelleAutor Vesper