Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-09-2003, 13:11   #1 (permalink)
confuser
 
Registriert seit: Oct 2001
Ort: Nähe Bonn
Beiträge: 218
Tasteneingabe beschränken

hi zusammen.
ich befasse mich zum ersten mal mit tastensteuerung in einer flash-animation. das prinzip ist einfach, ich habe einen film, der an einigen stellen durch stop(); angehalten wird. ein allgegenwärtiges MC mit folgendem script ermöglicht das resume per enter-taste:

ActionScript:
  1. onClipEvent (enterFrame) {
  2.     if (Key.isDown(Key.ENTER)) {
  3.         _root.play();
  4.         trace("YO!");
  5.     }
  6. }

bisher hatte ich immer ein paar bilder zwischen den stops. aber nun hatte ich mal ein stop direkt nach dem anderen und hier überspringt er, da er (durch das trace ersichtlich) mehrmals enter zählt.

wie kann ich das unterbinden?
ich dachte daran, dass ich an jeder dieser stellen den mc einsetze und beim rest halt nicht, aber das würde beim aktuellen problem keine abhilfe schaffen und wäre insgesamt auch zu aufwendig

hat jemand abhilfe?


(sorry, falls ich damit eine extrem banale/stupide frage stelle, aber in der suche hab ich nix gefunden )

Geändert von hoferisch (08-09-2003 um 13:13 Uhr)
hoferisch ist offline   Mit Zitat antworten
Alt 08-09-2003, 14:40   #2 (permalink)
confuser
 
Registriert seit: Oct 2001
Ort: Nähe Bonn
Beiträge: 218
ich muss nochmal "stören" :/
ich habs mal folgendermassen probiert:

ActionScript:
  1. onClipEvent (enterFrame) {
  2.     Key.addListener(this);
  3.     this.onKeyUp = function(Key.ENTER) {
  4.         trace("YO!");
  5.         play();
  6.        
  7.     }
  8. }

in der ausgabe erhalte ich die meldung:
Szene=W, Ebene=C ACTIONS, Bild=1: Zeile 3: )' oder ',' erwartet
this.onKeyUp = function(Key.ENTER) {

Szene=W, Ebene=C ACTIONS, Bild=1: Zeile 6: Unerwartetes Auftreten von '}'
}

allerdings funktioniert es.
das trace wird jedoch NICHT ausgeführt...
kann mir jemand erklären, woran sich flash nun stösst?


im voraus VIELEN DANK!!

Geändert von hoferisch (08-09-2003 um 14:43 Uhr)
hoferisch ist offline   Mit Zitat antworten
Alt 08-09-2003, 18:32   #3 (permalink)
confuser
 
Registriert seit: Oct 2001
Ort: Nähe Bonn
Beiträge: 218
so wriklich eine antwort hat keiner für mich, oder?
oder stell ich mich zu blöd an ... helft mir doch bitte auf die sprünge...
hoferisch ist offline   Mit Zitat antworten
Alt 08-09-2003, 18:49   #4 (permalink)
anyway
Gast
 
Beiträge: n/a
Dein erstes Script würde schon funktionieren, wenn Du innerhalb der if-Bedingung den enterFrame löschst.

anyway.
  Mit Zitat antworten
Alt 08-09-2003, 18:52   #5 (permalink)
anyway
Gast
 
Beiträge: n/a
Ups, hab nicht beachtet, das Du ein ClipEvent benutzt, machs mal lieber so:

ActionScript:
  1. deinMC.onEnterFrame = function ()  {
  2.  if (Key.isDown(Key.ENTER)) {
  3.  
  4.                 _root.play();
  5.                 trace("YO!");
  6. delete this.onEnterFrame;
  7.         }
  8. }

...dann dürfte es nur noch einmal auslösen.

anyway.
  Mit Zitat antworten
Alt 08-09-2003, 18:54   #6 (permalink)
confuser
 
Registriert seit: Oct 2001
Ort: Nähe Bonn
Beiträge: 218
das funktioniert tatsächlich, jedoch sagt die ausgabe nun, dass sie an der stelle einen bezeichner erwartet und mein trace funktioniert auch nicht.

onclipevent () ohne bezeichner scheint ihm also nich zu schmecken?!
hoferisch ist offline   Mit Zitat antworten
Alt 08-09-2003, 18:57   #7 (permalink)
anyway
Gast
 
Beiträge: n/a
Mh, bezeichner erwartet, mh?
Das Script ist keine Clip-Aktion mehr - gehört also auf ein Schlüsselbild - das hast Du gemacht, oder?

trace wird nicht mehr ausgeführt, weil Flash alle Aktionen jenseits eines Scriptfehlers übergeht und nicht mehr ausführt.

anyway.
  Mit Zitat antworten
Alt 08-09-2003, 19:07   #8 (permalink)
confuser
 
Registriert seit: Oct 2001
Ort: Nähe Bonn
Beiträge: 218
das war auf deinen ersten eintrag bezogen

ActionScript:
  1. onClipEvent (enterFrame) {
  2. C_CONTROL.onEnterFrame = function ()  {
  3.         if (Key.isDown(Key.ENTER)) {
  4.                 _root.play();
  5.                 trace("YO!");
  6.                 delete this.onEnterFrame;
  7.         }
  8. }
  9. }

ich weiss nich, ob ich das jetzt sehr umständlich gemacht habe, aber ich hab nicht viel ahnung von der funktionsweise der AS-syntax. so funktioniert es auf jeden fall. so wie du meinst, müsste ich das schlüsselbild mit dem script immer wieder einfügen, oder?

+++ edit:

andererseits funktioniert es eigentlich trotzdem nicht wirklich, denn mein trace wird wieder nicht angezeigt (obwohl kein fehler ausgegeben wird)

+++ edit:

"probieren geht über fragen"
danke vielmals!!!

Geändert von hoferisch (08-09-2003 um 19:12 Uhr)
hoferisch ist offline   Mit Zitat antworten
Alt 08-09-2003, 19:49   #9 (permalink)
anyway
Gast
 
Beiträge: n/a
Ähhm - nur mal so als Anmerkung am Rande:

das:

ActionScript:
  1. // diese Aktion steht als Bildaktion in dem Frame, in dem sich
  2. // auch der  MC C_CONTROL befindet
  3. C_CONTROL.onEnterFrame = function () {blabla}

...ersetzt das:

ActionScript:
  1. // diese Aktion steht als Objektaktion auf dem MC C_CONTROL
  2. onClipEvent(enterFrame) {blabla}



anyway.
  Mit Zitat antworten
Alt 08-09-2003, 20:07   #10 (permalink)
confuser
 
Registriert seit: Oct 2001
Ort: Nähe Bonn
Beiträge: 218
jaaaaaaaa, das hab ich mir dann später auch gedacht!
wie gesagt, VIELMALS danke
hoferisch ist offline   Mit Zitat antworten
Alt 09-09-2003, 11:34   #11 (permalink)
confuser
 
Registriert seit: Oct 2001
Ort: Nähe Bonn
Beiträge: 218
Unhappy

hallo nochmal,
ich habe eben herausgefunden, dass der vorschau-player in der flash-umgebung, die taste ENTER standardmässig zum stoppen und wieder starten eines filmes verwendet.

wenn ich den film exportiere und für sich selbst abspiele, funktioniert das script nicht bzw. nur einmal

muss ich das schlüsselbild mit dem script vielleicht auf jeden stopp legen? gibts da keine sinnige alternative?
oder muss ich den mc vielleicht an den stop-stellen irgendwie wieder initiieren? (keinen ahnung wie das geht, sorry )

Geändert von hoferisch (09-09-2003 um 11:42 Uhr)
hoferisch ist offline   Mit Zitat antworten
Alt 10-09-2003, 01:47   #12 (permalink)
anyway
Gast
 
Beiträge: n/a
Du kannst übrigens, wenn es Dir zu sehr auf den Nerv geht, den Film aufgrund genannten Problems in der Entwicklungsumgebung nicht testen zu können, einfach hergehen und in Flash das Shortcut ändern: Bearbeiten>Tastenkombinationen> und dann den Unterpunkt steuerung das Shortcut für 'abspielen' ändern...easy..

Nun zum Film: Ein stop auf jedem Bild ist unnötig, und am besten wäre es hier tatsächlich mit einem Listener zu arbeiten.

Habe Dir mal ein Bsp. angehangen.

anyway.
Angehängte Dateien
Dateityp: zip keylistener.zip (2,7 KB, 9x aufgerufen)
  Mit Zitat antworten
Alt 10-09-2003, 09:38   #13 (permalink)
confuser
 
Registriert seit: Oct 2001
Ort: Nähe Bonn
Beiträge: 218
erstmal danke für deine antwort.
du arbeitest da nicht mehr mit play(); sondern mit frame+1, wie ich gesehen habe. da ich allerdings mit verschiedenen "bruchstellen" arbeite (nicht regelmässig das nächste bild) dachte ich an numerisch durchbezeichnete bilder, die ich dann mit ner laufvariable ansteuern könnte.

aber mein problem bei der ganzen sache ist was anderes:
der film ist eine art präsentation mit mehreren szenen. diese szenen werde ich später aus einem steuerfilm heraus mit tasten ansprechen.
der listener verwendet alle tasten bzw. reagiert auf einen beliebigen tastendruck. ist blöd, denn es sollte (wg der anderen aktionen) eigentlich nur enter sein.
also kann ich den listener aus deinem beispiel irgendwie auf bestimmte tastenaktionen beschränken?
oder wäre es vielleicht einfacher, die aktion mit dem "alten" script über den steuerfilm zentral laufen zu lassen? geht das dann irgendwie besser?

(im steuerframe wird es auch noch movieclips geben, die sich bewegen etc. aber das is alles zentral und fast unabhängig von den szenen im eigentlichen film)

boah, ich schwafel immer so viel... falls irgendwas nicht verständlich ist - i'm sorry ... sehr schwer zu erklären ... wenn dann bitte einfach nochmal fragen

DANKE!
hoferisch ist offline   Mit Zitat antworten
Alt 10-09-2003, 13:09   #14 (permalink)
anyway
Gast
 
Beiträge: n/a
Huch Sry, stimmt..so wie der Key Listener jetzt arbeitet reagiert der natürlich auf jede Taste...

Änder den Code einfach wie folgt:

ActionScript:
  1. stop();
  2. kl = new Object();
  3. kl.onKeyDown = function () {
  4.     if (Key.isDown(Key.ENTER)) _root.gotoAndStop(_root._currentframe+1);
  5.     };
  6. Key.addListener(kl);

Natürlich könntest Du hier statt der Anweisung _root.gotoAndStop(_root._currentframe+1) natürlich auch _root.play() schreiben (insofern sich dann an geeigneter Stelle ein stop() als Frameaktion befindet - ansonsten würde der Film bis zum Ende durchrasseln)...

Das mit den Szenen könnte sich vielleicht problematisch auswirken, da ich nicht weiß, ob der listener szenenübergreifend durchgeschliffen wird...
Probiers einfach mal aus, und experimentier ein wenig rum. Wenns weitere Probs gibt, weißt Du ja, was zu tun ist..

anyway.
  Mit Zitat antworten
Alt 10-09-2003, 22:18   #15 (permalink)
confuser
 
Registriert seit: Oct 2001
Ort: Nähe Bonn
Beiträge: 218
ich hab mich noch ein wenig umgesehen und verwende nun folgendes script auf dem mc

ActionScript:
  1. onClipEvent (load) {
  2.     _parent.waitforAnyKey = function() {
  3.         _parent.onEnterFrame = function() {
  4.  
  5. // steuerung nach rechts
  6.             if (Key.isDown(Key.RIGHT)) {
  7.                 if (_parent.NEXT == true) {
  8.                     _parent.play();
  9.                     trace("TASTE VOR gedrueckt");
  10.                     delete _parent.onEnterFrame;
  11.                     _parent.DIRECTION = "right";
  12.                 }
  13.             }
  14.  
  15. // steuerung nach links
  16.             if (Key.isDown(Key.LEFT)) {
  17.                 if (_parent.BACK == true) {
  18.                     trace(_parent.G_frame);
  19.                     var goal = _parent.G_frame - 1;
  20.                     _parent.gotoAndStop("G"+goal);
  21.                     _parent.DIRECTION = "left";
  22.                    
  23.                     trace("TASTE ZURUECK gedrueckt");
  24.                     delete _parent.onEnterFrame;
  25.                 }
  26.             }
  27.  
  28.  
  29. // steuerung weiter
  30.             if (Key.isDown(Key.SPACE)) {
  31.                 _parent.play();
  32.                 trace("TASTE SPACE gedrueckt!");
  33.                 delete _parent.onEnterFrame;
  34.                 _parent.DIRECTION = "right";
  35.             }
  36.         };
  37.     };
  38.     _parent.waitforAnyKey();
  39. }
  40. onClipEvent (keyUp) {
  41.     if (Key.getCode() == 39) {
  42.         trace("TASTE VOR losgelassen");
  43.         _parent.waitforAnyKey();
  44.     }
  45.     if (Key.getCode() == 37) {
  46.         trace("TASTE ZURUECK losgelassen");
  47.         _parent.waitforAnyKey();
  48.     }
  49.     if (Key.getCode() == 32) {
  50.         trace("TASTE SPACE losgelassen");
  51.         _parent.waitforAnyKey();
  52.     }
  53. }

Geändert von hoferisch (10-09-2003 um 23:43 Uhr)
hoferisch 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 09:45 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele