kleines PRogramm

green_phanta

Erfahrenes Mitglied
HI

Ich will ein kleines Programm schrieben was folgendes machen kann:
Ich habe eine Liste mit lauter Namen und ich will einfach ein Programm machen was mir immer den nächsten namen anzeigt. Am besten wäre natürlich och ein Zufalls generator aber das muss nicht sein. Weil bei nem Zufalls generator müsste man ja noch dazu programieren das jeder Name nur einmal kommen kann und so , ich denke das ist zu aufwendig.
Könnt ihr mir helfen?

thx

greets green
 
Hi,

die zufällige Ausgabe von Elementen eines Arrays (ohne Wiederholungen) ist einfach:
Code:
var names = new Array("Hans", "Peter", "Willi", "Juergen");

while (names.length) {
	var rnd = int(Math.random() * names.length);
	var zufall = names.splice(rnd, 1);
	trace(zufall);
}

Gruß
.
 
Hi

Und wie setzte ich das jetz ein? Wie kann ich die Ausgabe einem Textfeld zuweisen?
Ausserdem will ich wirklich viele Namen nehmen dh, ich kann nicht die Klammer ganz lang machen und 100 Namen da reinschreiben... Geht das vielleciht mit ner externen TXT?

greets
 
Hi,

was Du vorhast, geht sicher alles, aber dafür müsstest Du schon ein paar mehr Informationen rausrücken - ich setze Dir hier nicht einfach eine fertige Vorlage auf der Grundlage von Vermutungen vor. ;)

Generell:
  • Einem Textfeld kannst Du Inhalte über seine .text-Eigenschaft zuweisen. Ich sehe wirklich nicht, wo hier das Problem liegen soll.

  • Du hast ja nicht gesagt, in welcher Form Deine Liste vorliegt - daher bin ich davon ausgegangen, dass Du sie schon in einem Array liegen hast.

    Natürlich kannst Du auch eine externe Text- oder XML-Datei einlesen und in ein Array schreiben. Je nach Gusto und Inhalt der Einträge kann eine CSV-Datei oder eine XML-Datei sinnvoller sein. Ein kleines Beispiel:
XML:
<n>Hans</n>
<n>Peter</n>
<n>Jochen</n>
<n>Willi</n>
Code:
var namen = new Array();

var xm = new XML();

xm.ignoreWhite = true;

xm.onLoad = function() {
  parse(this.childNodes);
}

xm.load("liste.xml");

function parse(obj) {
  for (var i=0; i<obj.length; i++) {
    namen[i] = obj[i].firstChild.nodeValue;
  }
}

Mit den Suchbegriffen "LoadVars" und "XML" findest Du hier im Forum eine unüberschaubare Anzahl an Tipps und Vorlagen zu den jeweiligen Themen.

Gruß
.
 
Zuletzt bearbeitet von einem Moderator:
Hi


Also,
Ich hab ne XML Datei mal mit deinem Inhalt erstellt. Und n Flashfile wo ein Textfeld "test" ist und eine AS Ebene mit deinem Code.
Wie weiße ich "test" jetz Text zu? Ich mein:
PHP:
_root.test.text = namen
kann ja ned stimmen weil dann werden ja die Namen nicht nacheinander aufgerufen? Und kann ein Textfeld überhaupt einen Array anzeigen?

Man müsste das so programieren das sich der Script immer nur eine Zeile von der XML nimmt (= ein name)...
Und dann müsste es noch nen Button geben, und wenn man den drückt nimmt es den nächsten Namen (= nächste Zeile) und zeigt ihn an.
Wie könnte ich das machen? Was hat LoadVars damit zu tun?

greets green
 
kann ja ned stimmen weil dann werden ja die Namen nicht nacheinander aufgerufen?
Du hast bisher nicht gesagt, was Du unter "Namen nacheinander aufrufen" verstehst.

Und dann müsste es noch nen Button geben, und wenn man den drückt nimmt es den nächsten Namen
Aha, jetzt wird es klarer. ;)

In diesem Fall wäre es natürlich Blödsinn, ein gesamtes Array in einem Textfeld anzeigen zu wollen.

Nach Aufruf der Funktion "parse" in meinem Beispiel hast Du nun ein Array mit allen Namen.

Wie man einen zufälligen Eintrag aus einem Array bekommt, habe ich Dir in meinem ersten Posting gesagt.

Wie man einen einzelnen String (besagten zufälligen Namen) in ein Textfeld schreibt, dürfte ebenfalls klar sein.

Wie man nun einen Mausklick auf einen Button (z.B. in Form eines MovieClips) abfragt, dürfte ebenfalls leicht rauszufinden sein (z.B. mit einem Blick ins Handbuch oder der Suchfunktion und dem Begriff "Button).

Ich habe ein wenig das Gefühl, dass Du grade Deine allerersten Schritte mit ActionScript machst - im Prinzip kein Beinbruch, aber dieses Forum dient eher zur Unterstützung bei konkreten Problemen, und nicht zur Vermittlung absoluter Grundlagen. Ich würde Dir daher raten, erst einmal die ersten paar Kapitel im Flash-Handbuch durchzugehen (Arbeiten mit Symbolen, Arbeiten mit Textfeldern, Anlegen von Funktionen, was sind Arrays usw.) und es dann noch einmal zu probieren.

Gruß
.
 
:)

OK das ist mal alles falsch rübergekommen.
Ich bin eigentlich kein neuling in Flash war nur in der Schule und hab deshalb ein bisschen hektisch geschrieben und nicht viel nachgedacht.
Also: nochmal von vorne,
Einem Textfeld Text zuweisen, auch aus einer externen .txt is kein Problem für mich. Einen Button abfragen auch nicht.
Ich hab ein txt, oder xml, wie auch immer, und darin hab ich einen Text:
PHP:
&content= blabla &
. Gut, jetz kann ich in Flash sagen er soll den Text von & .. bis .. & lesen und im Textfeld ausgeben, nur wie kann ich das jetz machen das er sich bei Klick auf den Button immer den nächsten Namen holt? Ich könnte mir das so vorstellen:
PHP:
var txt = new LoadVars();  
ladetext = "text.txt";

txt.onLoad = function() {
 _root.textfield.text = this.content; 
}

txt.load(ladetext);

Und in dieser Stelle liegt das Problem "_root.textfield.text = this.content; " weil er da ja nur den Teil Content rausnimmt. Wie wärs wenn ich anstatt content ne schleife einbaue die 1, 2, 3, 4, usw schreib und dann im txt die namen auch immer so beschreibe:
PHP:
&1=gustav&
&2=heinz&
&3=peter&
&4=alex&

Das müsste doch funktionieren. Das heißt ne Variable nehmen die Pro klick auf den Button immer um einen Wert steigt.
So?:

PHP:
var txt = new LoadVars();  
ladetext = "text.txt";
wert = "1"

_root.button.onRelease = function() {
wert += 1
txt.onLoad = function() {
 _root.textfield.text = this.wert; 
}
txt.load(ladetext);
}

Kann das so funktionieren?

Naja sorry das ich nicht gleich überlegt hab... Naja ich hab vorher irgendwie nicht gut nachgedacht... war mir aber eine Lehre. :)


thx
greets green
 
Zuletzt bearbeitet:
Hi,

wegen diesem Problem mit Textdateien und LoadVars (Du brauchst für jeden Eintrag eine eigens benannte Variable) habe ich eine XML-Datei vorgeschlagen.

Wenn Du meinen Code 1:1 übernimmst, fehlt Dir nur noch der Button, um ein Element aus dem Array anzuzeigen:
Code:
// hier der erste Teil meines Codes


function parse(obj) {
  for (var i=0; i<obj.length; i++) {
    namen[i] = obj[i].firstChild.nodeValue;
  }
  zeigeNaechsten();
}

function zeigeNaechsten() {
  var rnd = int(Math.random() * namen.length);
  var entry = namen.splice(rnd, 1);
  deinTextfeld.text = entry;
}

deinButton.onPress = function() {
  if (namen.length) {
    zeigeNaechsten();
  } else {
    trace("alle Namen angezeigt");
  }
}

Dein Vorschlag kann auf diese Weise nicht funktionieren, da Du bei jedem Klick die Textdatei neu laden willst - dadurch bekommst Du aber nicht bei jedem Mal die jeweils nächste Variable, sondern den gesamten Inhalt. Es ist daher sinnvoller, zunächst alle Daten einzuladen und in ein Array zu schreiben.

Gruß
.
 
Eine Frage noch:

Warum gibt mir Flash "undefined" raus wenn ich
PHP:
trace(entry)
eingebe?

greets


EDIT

Code:
this.onEnterFrame = function() {
textfeld1.text = textfeld1.text.split("text").join(entry);
}
Das gibt mir auch nur undefinded aus
 
Zuletzt bearbeitet:
Zurück