Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-01-2005, 11:11   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 36
AS Probleme bei Navigation

Hallo,

ich heiße Klaus und bin eigentlich Grafikdesigener,
arbeite aber auch gern mal mit Flash, doch Actionscript
bereitet mir noch einige Probleme. (hört sich an wie bei
der Sendung mit der Maus)

Zum Thema:

"Mein" Menü soll bei RollOver ein wenig hoch fahren
und bei RollOut wieder runter. Das klappt schon mal.
(Danke an http://www.flashstar.de/ für MenuFin2.fla)
Wenn man einen Menüpunkt anklickt soll ein Feld von
oben oder der Seite bzw. von oben und beiden Seiten auf
die Bühne "fahren" und das durch Actionscript (also kein
Bewegungstween).

Das Problem:

Für ein Feld klappt das schon, aber nur wenn ich die
Instanz explizit angebe. Es soll aber wenn ich z.B auf "Kontakt"
klicke das Feld zu Kontakt erscheinen und wenn ich z.B. auf "Marken"
klicke die Felder zu Marken und nicht wieder das zu Kontakt.
(hoffe das versteht jemand)
Außerdem soll der angeklickte Menüpunkt "oben" bleiben und nicht
bei RollOut wieder runter gehen und die Felder von einem Alphawert
von 100 auf einen von ca 60 wärend der "Fahrt".
Ich probiere seit Tagen immer mal wieder herum das alleine zu
schaffen, doch meine zu geringe AS-Kenntnis läßt das nicht zu.
Hab das auch mit 2 verschiedenen Methoden versucht:
1. das gesamte AS in einem Bild (index1.fla)
2. AS im 1. Bild nur für das Menü zuständig mit Verweis auf ein anderes
Bild, wo dann das Feld kommen sollte.
Würde mich riesig über Hilfe freuen....

Hier das AS zu 1.

Code:
// Positionieren (Slide)
MovieClip.prototype.slideClip = function(pHoch, pRunter, pHFaktor, pRFaktor) {
	with (this) {
		if (signal == 1) {
			_y += (pHoch-_y)/pHFaktor;
		}
		if (signal == 0) {
			_y += (pRunter-_y)/pRFaktor;
		}
	}
};
// Navigations Clip (Inhalt)
MovieClip.prototype.initClip = function(pClip, pTitel) {
	pClip.txtTitel = pTitel;
	pClip.signal = 0;
	pClip.label = pTitel;
	// Mausereignisse
	pClip.onRollOver = function() {
		this.signal = 1;
	};
	pClip.onRollOut = function() {
		this.signal = 0;
	};
	pClip.onPress = function() {
		mc_con04.signal = 1;
	};
};
// Navigations Clip Initialisieren
onLoad = initClip(mc_men01, "dino's");
onLoad = initClip(mc_men02, "schaufenster");
onLoad = initClip(mc_men03, "marken");
onLoad = initClip(mc_men04, "kontakt");
// Navigations Clip Positioniern und Bewegen
mc_men01.onEnterFrame = function() {
	this.slideClip(400, 420, 2, 3);
};
mc_men02.onEnterFrame = function() {
	this.slideClip(400, 420, 2, 3);
};
mc_men03.onEnterFrame = function() {
	this.slideClip(400, 420, 2, 3);
};
mc_men04.onEnterFrame = function() {
	this.slideClip(400, 420, 2, 3);
};
// Inhalt Clip (Inhalt)
MovieClip.prototype.initContent = function(cClip) {
	cClip.signal = 0;
};
// Content Initialisieren
onLoad = initContent(mc_con01);
onLoad = initContent(mc_con02);
onLoad = initContent(mc_con03);
onLoad = initContent(mc_con04);
// Content Positioniern und Bewegen
mc_con01.onEnterFrame = function() {
	this.slideClip(380, 0, 3, 3);
};
mc_con02.onEnterFrame = function() {
	this.slideClip(380, 0, 3, 3);
};
mc_con03.onEnterFrame = function() {
	this.slideClip(380, 0, 3, 3);
};
mc_con04.onEnterFrame = function() {
	this.slideClip(380, 0, 3, 3);
};
stop();

Hier die 2 Flas:
Angehängte Dateien
Dateityp: zip Navi.zip (21,1 KB, 19x aufgerufen)
clauskaa ist offline   Mit Zitat antworten
Alt 26-01-2005, 14:42   #2 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
Willkommen im Forum!

Vorweg mal etwas.
Wenn du ein Problem hast solltest du generell dieses so kompakt wie möglich-aber mit allen nötigen details- darstellen.
Dein Text ist richtig lang geworden, und so reduzierst du die Anzahl "williger" Helfer enorm-es gibt kaum jemanden der soviel Zeit verwendet um sich in ein Thema einzuarbeiten- und dann auch noch flas..

Bevor man dich im Regen stehen läßt hier meine Ratschläge:
---
onLoad = initClip(mc_men01, "dino's");

ergibt keinen sinn was hast du damit vor?
du kannst auf den onLoad eine funktionsreferenz(mc.onLoad=funktionsname)
setzen, so setzte nur den rückgabewert von initClip, in diesem fall undefined

--
du hast 5 frames und in allen steht der o.g. code. warum?
initialisieren muß du nur einmal, prototypen von funktion müssen einmal definiert werden- und können dann von jedem mc benutzt werden- wiederverndbarkeit von code nennt man das und das sollte auch der sinn von funktionen sein.
---

enterFrame löscht man nachdem sie ihren dienst erledigt haben(hier den entspr. clip fertiggeslidet haben)
--
das mit der signalvariablen ist gut überlegt aber ein wenig veraltet, du kannst doch bei bedarf onEnterFrames setzen und löschen- warum nicht davon gebrauch machen?
--
du solltest dir ein wenig klarer über den gültigkeitsbereich von variablen und funktionen werden. dann verstehste auch warum einmal this und dann wieder kein this gebraucht wird. suche im forum hilft(fachjargon: scope)
--
im prinzip würde ich so ein menü wie folgt realisieren.
ich benutze in der hauptzeitleiste(_root) nur ein einziges frame

darin
ein movieclip der das menü enthält
ein movieclip der den content enthält

im menü die buttons.
auf die buttons sowas in der art

ActionScript:
  1. button1.onRelease=function(){
  2. var id=EigeneID (zB "kontakt","home" usw)
  3. FunktionDieEventuellGeoeffneteContentFelderAusslidet()
  4. FunktionDieEntsprechendesContentFeldEinSlidet(id)
  5. }
  6. //ne slidefunktion könnte dann zB so aussehen-ohne signal
  7. MovieClip.prototype.slideMe=function(zielx,ziely){
  8. //argumente auf mc ablegen
  9. this.zielx=zielx
  10. this.ziely=ziely
  11. this.speed=10
  12. //enterFrame auf mx setzen
  13. this.onEnterFrame=function(){
  14. //wie weit noch entfernt vom ziel?
  15. var diffx=this.ziely-this._y
  16. var diffy=this.ziely-this._y
  17. //einen teil der entfernugn abtragen
  18. this._x+=diffx/speed
  19. this._y+=diffy/speed
  20. //mc am ziel angekommen?
  21. if((Math.abs(diffx)+Math.abs(diffy))<2){
  22. //angekommen, also auf zielplätze setzen
  23. this._x=this.zielx
  24. this._y=this.ziely
  25. //und enterFrame löschen
  26. delete this.onEnterFrame
  27. }
  28. }


du kannst in nem neuen film doch mal kleine elemente deines films nachbauen.
zB wie mache ich das mit dem sliden.
machste ne funktion und läßt nen schwarzes quadrat mal sliden.
usw

viel erfolg
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 26-01-2005, 19:51   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 36
Hallo Deluxe,

danke für die Hilfe, doch leider klappt es jetzt gar nicht:
Wenn ich das Script mal testen lasse, dann kommen folgende
Fehlermeldungen:

**Fehler** Szene=Scene 1, Ebene=Zonen, Bild=1:Zeile 1: Anweisung muss innerhalb einer on/onClipEvent-Prozedur vorliegen
button4.onRelease = function(){

**Fehler** Szene=Scene 1, Ebene=Zonen, Bild=1:Zeile 6: Anweisungsblock muss mit '}' beendet werden
MovieClip.prototype.slideMe=function(zielx,ziely){

**Fehler** Szene=Scene 1, Ebene=Zonen, Bild=1:Zeile 27: Syntaxfehler.
}

**Fehler** Szene=Scene 1, Ebene=Zonen, Bild=1:Zeile 6: Anweisung muss innerhalb einer on/onClipEvent-Prozedur vorliegen
MovieClip.prototype.slideMe=function(zielx,ziely){

Anzahl der ActionScript-Fehler: 4 Gemeldete Fehler: 4



id=EigeneID hab ich mal durch id=kontakt ersetzt

FunktionDieEventuellGeoeffneteContentFelderAusslid et()
FunktionDieEntsprechendesContentFeldEinSlidet(id)
hab ich mal
durch dinos.gotoAndPlay(1) ersetzt,

obwohl das ja auch mein Problem war ein Script zu schreiben bzw. finden das ein oder
mehrere Felder in die Bühne fahren lässt, aber zuvor die Felder, die sich
auf der Bühne befinden wieder einfährt.
Hab ich irgendwas bei deiner Antwort nicht richtig verstanden oder besser
gesagt, kannst du mir nochmal behilflich sein?
clauskaa ist offline   Mit Zitat antworten
Alt 26-01-2005, 22:49   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
hey!
du solltest das script doch nicht kopieren sondern verstehen.

fehler ja
fehlt eine geschweifte klammer
das AS muß in nen frame geschrieben werden und nicht auf nem mc platziert werden.

die ewiglangen funktionsnamen sind noch ohne bedeutung oder denkst du die wären in flash implementiert?!
die sollten vom namen her dir beschreiben was für funktionen du erstellen solltest.

fang doch wie gesagt klein an
nimm dir doch nicht 10 codeschnippsel die du nicht verstehst- so kommst du nie selbst hinter einen fehler.

unter zeitdruck ist das schwer- klar- aber es hat doch einen hohen nachwert sich damit länger zu beschäftigen.


nächtliche grüße
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 27-01-2005, 08:15   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 36
klar, ich würde mir gerne mehr zeit nehmen aber
du sagst schon das Zauberwort: Zeitdruck
Trotzdem Danke!
clauskaa ist offline   Mit Zitat antworten
Alt 27-01-2005, 18:26   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
hier mal wie ich gemeint habe
ist doch recht übersichtlich kannste doch sicher auch was mit anfangen-zwecks selbst ausbauen

deluxe
Angehängte Dateien
Dateityp: rar testfile.rar (2,7 KB, 31x aufgerufen)
Deluxe ist offline   Mit Zitat antworten
Alt 27-01-2005, 20:49   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 36
Super! Danke! Schau mir das gleich mal an!
clauskaa ist offline   Mit Zitat antworten
Alt 31-08-2005, 23:31   #8 (permalink)
v-lenz(er)
 
Registriert seit: Jul 2005
Ort: NRW
Beiträge: 87
kannst du die zip noch mal hochladen mit den letzten daten?
ich kann die nicht öffnen bei mir. der sagt es liege ein fehler vor ... datei defekt oder so. also die rar !!! bzw zip !!!

wäre cool

grüße
vlenz ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele