zahl weiterverarbeiten

Blattspinat

Erfahrenes Mitglied
folgendes Problem stellt sich mir:
Ich hab mit hilfe dieses schönen boards hier und euch netten usern eine Zufallszahl gebastelt - hey wow! :) Nur jetzt möchte ich die weiterverarbeiten, aber irgendwie net so wie ich mir das vorgestellt hatte:

Code:
function die_funktion() {
	die_zahl = random(4);
	_root.ausgabewert.text = die_zahl;
}
die_funktion();
setInterval(die_funktion, 1000);

if(ausgabewert=0) {
      _root.video1.gotoAndPlay("2"); }

else if(ausgabewert=1) {
      _root.video2.gotoAndPlay("2"); }

else if(ausgabewert=2) {
      _root.video3.gotoAndPlay("2"); }

else if(ausgabewert=3) {
      _root.video4.gotoAndPlay("2"); }

stop();

Die zahl wird generiert, und ich denke auch, dass die if-Anweisungen ok sind. das problem scheint an dem _root.videoX.gotoAndPlay("2"); zu liegen. Instanznamen sind alle korrekt. Ich hatte das Problem schon einmal. War in einem anderen zusammenhang, so dass ich es mit einem on (Release) {} lösen konnte. Ist hier aber etwas anders...
 
Hi,

was soll dort wann und womit passieren?

Ich zähle mal die (logischen und syntatktischen) Fehler auf, die mir sofort ins Auge springen:
  • "ausgabewert" ist ein Textfeld. Der Wert dieses Bezeichners kann also niemals eine Zahl sein. Wenn, dann solltest Du auf die Texteigenschaft (ausgabewert.text) zurückgreifen, die allerdings einen String (z.B. "2") zurückgibt. Da Du Deine Zufallszahl schon in der Variable "die_zahl" stehen hast, würde ich auch einfach diese Variable zum Abfragen verwenden.

Code:
if(ausgabewert=0) {
Das ist kein Vergleich, sondern eine Zuweisung. Konkret weist Du hier dem Bezeichner für ein Textfeld den Wert 0 zu. Bei Vergleichen immer den Gleichheitsoperator (==) verwenden.


Code:
_root.video1.gotoAndPlay("2");
Bildnummern werden ohne Anführungsstriche angegeben (es sei denn, Du hast ein Bild mit dem Bildbezeichner "2").


  • Deine Funktion wird in Intervallen von einer Sekunde ausgeführt, und produziert auch brav jedes Mal eine Zufallszahl. Deine Abfrage dieses Wertes und die gotoAndPlay-Anweisungen stehen allerdings einfach so im Code und werden daher nur einmal ausgeführt. Wenn ich recht in der Annahme gehe, dass diese Abfrage bei jeder neuen Zahl ausgeführt werden soll, musst Du sie auch von der Funktion "die_funktion" aus starten.

Was nun genau zu ändern ist, kann ich Dir allerdings erst sagen,wenn Du uns verrätst, was das Ding im Endeffekt machen soll. ;)

Gruß
.
 
also ich hab 4 MCs in meiner Ebene. video1, video2, video3 und video4 (Instanznamen). Alle MCs haben im ersten Keyframe ein stop(), damit sie nicht von anfang an abgespielt werden. Deshalb auch gotoAndPlay(2); ! Ich will jetzt, dass, je nach dem welche Zahl der Zufallsgenerator ausgibt, eine der 4 Animationen gestartet wird. Also wenn Zahl 1 ausgegeben wird, dann spiele den MC mit dem name video2 ab.

Code:
function die_funktion() {
	die_zahl = random(4);
	_root.ausgabewert.text = die_zahl;
	
		if(die_zahl==0) {
			_root.video1.gotoAndPlay(2); }
		else if(die_zahl==1) {
			_root.video2.gotoAndPlay(2); }
		else if(die_zahl==2) {
			_root.video3.gotoAndPlay(2); }
		else if(die_zahl==3) {
			_root.video4.gotoAndPlay(2); }
}
die_funktion();
setInterval(die_funktion, 1000);
 
Zuletzt bearbeitet:
Hi,

wenn dann:
Code:
function die_funktion() {
	die_zahl = int(Math.random() * 4);
	_root.ausgabewert.text = die_zahl;
	
		if(die_zahl==0) {
			_root.video1.gotoAndPlay(2); }
		else if(die_zahl==1) {
			_root.video2.gotoAndPlay(2); }
		else if(die_zahl==2) {
			_root.video3.gotoAndPlay(2); }
		else if(die_zahl==3) {
			_root.video4.gotoAndPlay(2); }
}
die_funktion();
setInterval(die_funktion, 1000);
Erheblich abkürzen könntest Du das ganze so:
Code:
function die_funktion() {
	die_zahl = int(Math.random() * 4);
	_root.ausgabewert.text = die_zahl;
	_root["video" + (die_zahl - 1)].gotoAndPlay(2);
}
die_funktion();
setInterval(die_funktion, 1000);

Gruß
.
 
ahh!! optimal! Funktioniert einwandfrei! Jedoch noch eine kleine frage: wie kann ich jetzt noch vermeiden, dass nicht 2 mal die gleiche Zahl hintereinander gewählt wird?
 
Hi,

Code:
var numbers = new Array(1, 2, 3, 4);
var num = numbers;
var li = -1;

function getNum() {
    do {
        var i = Math.random(num.length);
    } while (i == li);
    li = i;
    var n = num[i];
    num.splice(i, 1);
    if (num.length < 1) num = numbers;
    _root["video" + n].gotoAndPlay(2);
}
getNum();
setInterval(getNum, 1000);

Gruß
.
 
Zuletzt bearbeitet:
pferfekt, danke!

Jetzt hab ich nur noch ein ganz kleines Problem:

Ich möchte, dass beim Click auf eines der MCs der Wert in der Variable um 100 erhöht wird. folgendes hab ich mir gedacht:

im 1. Frame des Films:
Code:
startwert = "0"

_root.punktepool.text = startwert ;

und dann in den MC Instanzen:
Code:
on (Release) {
	startwert+100;
	}

aber irgendwie tut sich nix...
 
also hiermit fügt er was dazu, aber dahinter und rechnet es nicht zusammen:

_root.punktepool.text = _root.punktepool.text+100;
 
Zurück