Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash CS4 Professional

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-12-2009, 02:40   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2009
Beiträge: 3
Red face Timer vor Funktionsstart

Hey Leute, ich habe in CS4 aber mit AS2 !!! ein Tetrisspiel programmiert.

AN und für sich funktioniert alles, bis auf die STelle, an der der neue Stein, nach einer gewissen Zeit kommen soll.
Ich habe mich an diesem QUelltext orientiert, nur mittler weile eingie Variablen umgenannt und Button hinzugefügt:
Tetris Game | Flash Tutorials

Das ist das Problem:
Code:
if (framecount % geschwindigkeit == 0)
	{
		if (!paused)
		{
			if (unitmap[xx[0]][yy[0] + 1] == undefined && unitmap[xx[1]][yy[1] + 1] == undefined && unitmap[xx[2]][yy[2] + 1] == undefined && unitmap[xx[3]][yy[3] + 1] == undefined)
			{
				current4piece._y = yy[3] * blockgroesse;
				current3piece._y = yy[2] * blockgroesse;
				current2piece._y = yy[1] * blockgroesse;
				currentpiece._y = yy[0] * blockgroesse;
				for (var i = 0; i < 4; i++)
				{
					yy[i]++;
				}
			}
			else
			{
				timer = function()
					{
						id = setInterval(zaehlen, 1000);
					  	var sek = 0;
					  	function zaehlen()
					  	{ 
							if (sek <2)
					   		{
								sek++;
							}
							else
							{
								trace("Hello");
								unitmap[xx[0]][yy[0]] = currentpiece;
								unitmap[xx[1]][yy[1]] = current2piece;
								unitmap[xx[2]][yy[2]] = current3piece;
								unitmap[xx[3]][yy[3]] = current4piece;
								neuesteil();
								framecount = 7;
								sek = 0;
							}
					   }
					}
				
			}
Er prüft erst, ob unter allen 4 Steilen des Tetrisbausteins Platz ist (y-wert + 1) wenn ja, y++ (eins nach unten) wenn nein soll man ihn noch ein bisschen drehen können und dann der neue Baustein kommen.

Ich lass die zaehlen fkt. alle 1000ms durchlaufen dann kommt if 2 mal
und dann im else soll die fkt newpiece starten, tut sie nicht

Am Freitag müssen wir es vorstellen, schaut auf die Uhr, ich muss jetzt pennen.
Wäre super, wenn ihr schnell antworten könntet, falls ihr etwas wisst!

DANKE!
Sufferscream ist offline   Mit Zitat antworten
Alt 03-12-2009, 04:52   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Crossposts sind hier unerwünscht, habe den anderen Beitrag gelöscht. Und mit zusammenhanglosen Scriptschnippseln kann man nicht viel anfangen...
  Mit Zitat antworten
Alt 03-12-2009, 11:17   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2009
Beiträge: 3
Timer vor Funktionsstart

Hey,
entschuldigung für den crosspost, war mir nicht ganz sicher in welche RUbrik es gehöhrt.
Also der Rest des Quellcodes steht ja unter dem oben geposteten Link. Mein Problem, dass die neuesteil-FUnktion, nicht aufgerufen wird und ich mein Teil länger als 2 Sekunden drehen kann muss irgendwo in dem Auschnitt liegen.
Ich poste später nochmal weiterführendes.
Danke für die Hilfe...
Sufferscream ist offline   Mit Zitat antworten
Alt 03-12-2009, 11:24   #4 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 192
ehrlichgesagt hab ich nicht im geringsten verstanden was jetzt dein problem ist, genau genommen hast dus auch nicht gesagt glaub ich
Plopsi ist offline   Mit Zitat antworten
Alt 03-12-2009, 13:44   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2009
Beiträge: 3
Timer vor Funktionsstart

Also sry nochmal, ich habe das heute nacht um 6 noch gepostet total übermüdet und demotiviert. Es ist mir nur sehr wichtig, da bald Abgabe ist.

Ziel war es in Flash ein Tetrisspiel zu programmieren.
Zur Grundlage habe ich den oben genannten Link verwendet.

Das Spiel an sich funktioniert auch, nur will ich an der Stelle, an der der Stein nicht weiter nach unten gerückt werden kann, dass man ihn noch eine gewisse ZEit (ca. 2 Sekunden) drehen kann.

Dem entsprechend auch der Quellcode, den ich im folgenden kurz erläutern will:

Code:
if (framecount % geschwindigkeit == 0)
	{
		if (!paused)
		{
			if (unitmap[xx[0]][yy[0] + 1] == undefined && unitmap[xx[1]][yy[1] + 1] == undefined && unitmap[xx[2]][yy[2] + 1] == undefined && unitmap[xx[3]][yy[3] + 1] == undefined)
			{
				current4piece._y = yy[3] * blockgroesse;
				current3piece._y = yy[2] * blockgroesse;
				current2piece._y = yy[1] * blockgroesse;
				currentpiece._y = yy[0] * blockgroesse;
				for (var i = 0; i < 4; i++)
				{
					yy[i]++;
				}
			}
Zu erst wird u.a. geprfüt, ob sich das SPiel im Pausemodus befindet. Wenn nicht (!=) beginnt eine If-Schleife in der er prüft, ob unter dem Tetrisbaustein ein definiertes Feld ist. (Jeder Tetrisbaustein besteht aus 4 Steinen die alle im Array eine extra Variable zugesprochen bekommen haben. Für jede einzelne wird geprüft ob darunter ( [yy[0] + 1] ) definiert ist, wenn nicht rückt er den Stein eins nach unten ( yy[i]++. Dies natürlich für alle 4 Steine, deswegen bis i=4

Wenn darunter ein definiertes Feld ist, kommt die Else-Anweisung, in der das Problem liegt:
Code:
			else
			{
				timer = function()
					{
						id = setInterval(zaehlen, 1000);
					  	var sek = 0;
					  	function zaehlen()
					  	{ 
							if (sek <2)
					   		{
								sek++;
							}
							else
							{
								trace("Hello");
								unitmap[xx[0]][yy[0]] = currentpiece;
								unitmap[xx[1]][yy[1]] = current2piece;
								unitmap[xx[2]][yy[2]] = current3piece;
								unitmap[xx[3]][yy[3]] = current4piece;
								neuesteil();
								framecount = 7;
								sek = 0;
							}
					   }
					}
				
			}
Wenn in einem Feld unter dem Baustein ein definiertes ist kann er nicht runtergerückt werden. Dann müssen die 4 einezlnen Kästchen zur SPieloberfläche konvertiert werden, damit sie nicht verschwinden, wenn ein neues Spiel kommt ( unitmap[xx[0]][yy[0]] = currentpiece; ).
Mein Ziel ist es aber, dass bevor dies geschit und die Funktion "neuesteil" aufgerufen wird, ein timer abläuft mit dessen Hilfe man den Tetrisbaustein noch eine gewisse Zeit darauf drehen kann (z.B.: in eine Lücke schieben, oder nach links/rechts bewegen).
Dies habe ich versucht, durch die Funktion timer zu erreichen, die auch funktioniert (also ich kann den Stein noch eine gewisse ZEit drehen)
Die Variable framecount ist dafür von keiner Bedeutung. Der trace ist nur für mich zu einsichtnahme beim testen.
In der Funktion "neuesteil" wird über eine random-funktion ein neues Teil bestimmt, die Variablen current(1-4)piece entsprechend deklariert und dann das teil stets über die oben genannte if-Schleife ein nach unten gerückt.

Ich habe auch schon versucht, die funktion extern abzulegen und afzurufen, dann kommt zwar ein neues Teil, aber diese werden exponentiell mehr (erst läuft ein timer, dann 2, dann 4 usw.) Und das Spiel ist sofort zu Ende, da die neuen Tetrisbausteine zur unbeweglichen Spielfläche konvertiert werden.

Ich hoffe ich konnte jetzt genau genug erklären, wo das Problem liegt und ich hoffe ihr wisst, was ich flasch gemacht habe.
Sufferscream ist offline   Mit Zitat antworten
Alt 03-12-2009, 14:59   #6 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 192
Code:
clearInterval(id)
id = setInterval(zaehlen, 1000);
du musst das interval auch wieder clearen sonst erzeugst du immer mehr die alle gleichezeitig laufen
Plopsi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
as2, funktion, sekunden, starten, timer

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
timer tomotzi ActionScript 1 2 31-03-2004 14:22
Timer Churchill27 Flash MX 5 02-11-2003 09:28
Timer Flasher Hermann Flash 4 und Flash 5 6 11-10-2002 08:10
Timer fworm Flash MX 1 20-09-2002 12:19
timer reisch ActionScript 1 5 11-07-2002 16:04


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele