Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-01-2005, 22:48   #1 (permalink)
FlashSamurai
 
Registriert seit: Mar 2004
Ort: Celle
Beiträge: 104
onRollOut & MovieClip

Hallo!

Auf meinem MC liegt das Script:

ActionScript:
  1. onClipEvent (enterFrame) {
  2.     targetx = 10 - this._x - this._xmouse / 2;
  3.     this._x = this._x + (targetx - this._x) / 5;
  4. }

Welches den MC relativ zur Mausposition bewegt.
Wenn die Maus den MC nun aber verlässt, soll der MC zurück zu targetx =10!

Wie stell ich dass am Besten an? onRollOut? Hätte gerne ein einfaches Codeschnipselchen das ich direkt auf den MC legen kann.. Wer kann mir helfen?

Lieben Gruß
Teddy
__________________
Hebt man den Blick,
so sieht man keine Grenzen
teddy86 ist offline   Mit Zitat antworten
Alt 04-01-2005, 22:56   #2 (permalink)
Flash & TYPO3
 
Registriert seit: Oct 2003
Ort: Bayern
Beiträge: 2.700
Um festzustellen, ob du Maus außerhalb des Flash-Movies liegt brauchst du JavaScript. Was aber auch möglich wäre: du erstellst einen MC mit alpha=0, der über die ganze Bühne mit einem Pixel Rand geht. Dann kannst du den einfach als "Bühnengröße" verwenden. Darf halt in dem 1px-Rand nichts wichtiges sein...
__________________
Mediendesign-Student
johanness ist offline   Mit Zitat antworten
Alt 05-01-2005, 09:26   #3 (permalink)
FlashSamurai
 
Registriert seit: Mar 2004
Ort: Celle
Beiträge: 104
Es geht ja nicht darum ob die Maus außerhalb des Bühnenrandes ist oder nicht. Erstmal gehts nur darum, ob die maus auf dem mc liegt oder nicht.

meine frage ging dahin wie der code aussieht mit dem ich feststellen kann ob die maus nicht über einem MC "xyz" liegt...

mfg
teddy
__________________
Hebt man den Blick,
so sieht man keine Grenzen
teddy86 ist offline   Mit Zitat antworten
Alt 05-01-2005, 11:37   #4 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Hy.

Das kannst Du mit hitTest() lösen.
hitTest() registriert z.B. ob die Maus ein Objekt
berührt.

Gruß
John

edit:
Oder Du kannst es auch per onRollOver und onRollOut
machen. Dann musst Du z.B. bei einem onRollOver einen
onEnterFrame() auslösen, den Du dann beim onRollOut
wieder eliminierst. (delete mc.onEnterFrame
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------

Geändert von thebiz (05-01-2005 um 11:40 Uhr)
thebiz ist offline   Mit Zitat antworten
Alt 05-01-2005, 12:18   #5 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Hi,
hab mir mal erlaubt die Vorschläge von thebiz in AS um zusetzen.
Einzige wasse noch machen mußt ist das Script in den ersten Frame deiner Zeitleiste zulege und dein MC eine Instance bspw. "mein_mc" zugeben.

Die hitTest Variante
ActionScript:
  1. mein_mc.onEnterFrame = function() {
  2.     if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
  3.         var targetX = 10-this._x-_root._xmouse/2;
  4.         this._x = this._x+(targetX-this._x)/5;
  5.     } else {
  6.         this._x = 10;
  7.     }
  8. };
Oder mit RollOver/Out:
ActionScript:
  1. mein_mc.onRollOver = function() {
  2.     this.onEnterFrame = function() {
  3.         var targetX = 10-this._x-_root._xmouse/2;
  4.         this._x = this._x+(targetX-this._x)/5;
  5.     };
  6. };
  7. mein_mc.onRollOut = function() {
  8.     delete this.onEnterFrame;
  9.     this._x = 10;
  10. };
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 05-01-2005, 15:19   #6 (permalink)
User
 
Benutzerbild von jeypack
 
Registriert seit: Sep 2003
Ort: Essen
Beiträge: 616
@psyk: Bei deiner Vorgehensweise läuft er aber nicht wieder zurück, sondern springt. Ich mein ja nur...

Also ich verstehe dein Problem so:

Du möchtest, dass der mc folgt, aber nur bei einem rollOver.
Ein rollOut dürfte dann ja nicht passieren, wenn der mc folgt, oder ich versteh was falsch.

ActionScript:
  1. // dies hier ins erste frame der maintimeline
  2. MovieClip.prototype.followOnRollOver = function() {
  3.     this.useHandCursor = false;
  4.     this.scr = this.getBounds(_root);
  5.     this.x = this._x;
  6.     this.y = this._y;
  7.     this.onEnterFrame = function() {
  8.         if (_xmouse>=this.scr.xMin && _xmouse<=this.scr.xMax && _ymouse>=this.scr.yMin && _ymouse<=this.scr.yMax) {
  9.             this._x += Math.ceil((_xmouse-this._x)/5);
  10.         } else {
  11.             this._x += Math.ceil((this.x-this._x)/3);
  12.             if (Math.floor(Math.sqrt(((this._x-this.x)*(this._x-this.x))+((this._y-this.y)*(this._y-this.y))))<5) {
  13.                 this._x = this.x;
  14.                 delete this.onEnterFrame;
  15.             }
  16.         }
  17.     };
  18. };
  19. // hier für entsprechenden mc die Methode bei rollOver aufrufen
  20. rechteck_mc.onRollOver = function() {
  21.     this.followOnRollOver();
  22. };

ausprobieren...
__________________
Gruß, Jey!
jeypack ist offline   Mit Zitat antworten
Alt 05-01-2005, 15:27   #7 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
@jeypack: Nicht schlecht!
Bei deiner Vorgehensweise läuft er aber auf eine relativen Punkt x zurück, Vorgabe war aber 10. Ich mein ja nur...
PHP-Code:
// dies hier ins erste frame der maintimeline
MovieClip.prototype.followOnRollOver = function() {
    
this.useHandCursor false;
    
this.scr this.getBounds(_root);
    
this.10
    this
.this._y;
    
this.onEnterFrame = function() {
        if (
_xmouse>=this.scr.xMin && _xmouse<=this.scr.xMax && _ymouse>=this.scr.yMin && _ymouse<=this.scr.yMax) {
            
this._x += Math.ceil((_xmouse-this._x)/5);
        } else {
            
this._x += Math.ceil((this.x-this._x)/3);
            if (
Math.floor(Math.sqrt(((this._x-this.x)*(this._x-this.x))+((this._y-this.y)*(this._y-this.y))))<5) {
                
this._x this.x;
                
delete this.onEnterFrame;
            }
        }
    };
};
// hier für entsprechenden mc die Methode bei rollOver aufrufen
rechteck_mc.onRollOver = function() {
    
this.followOnRollOver();
}; 
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 05-01-2005, 16:12   #8 (permalink)
User
 
Benutzerbild von jeypack
 
Registriert seit: Sep 2003
Ort: Essen
Beiträge: 616
Zitat:
Zitat von psyk
@jeypack: Nicht schlecht!
Bei deiner Vorgehensweise läuft er aber auf eine relativen Punkt x zurück, Vorgabe war aber 10. Ich mein ja nur...
Da hast du natürlich recht.

Ist halt alles auch relativ abhängig vom Registrierungspunkt des mc.

Ich denke, auf jeden Fall ist diese Vorgehensweise echt performance-günstich, da er den onEnter ja immer wieder abschaltet.

Gruß
__________________
Gruß, Jey!
jeypack ist offline   Mit Zitat antworten
Alt 05-01-2005, 16:21   #9 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Das onEnterFrame schaltet nur ab,
wenn auch this.x erreicht wird.

Kann es da nicht zu Ungenauigkeiten kommen?
Ich glaube damit hatte ich schon so manchmal zu kämpfen.

Da kann man ja sicherheitshalber noch eine
if-Abfrage einbauen. wenn this._x z.B. in die nähere Region
von this.x kommt.

Nur mal so marginal erwähnt
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 05-01-2005, 17:09   #10 (permalink)
User
 
Benutzerbild von jeypack
 
Registriert seit: Sep 2003
Ort: Essen
Beiträge: 616
Zitat:
Zitat von thebiz
Das onEnterFrame schaltet nur ab,
wenn auch this.x erreicht wird.

Kann es da nicht zu Ungenauigkeiten kommen?
Ich glaube damit hatte ich schon so manchmal zu kämpfen.

Da kann man ja sicherheitshalber noch eine
if-Abfrage einbauen. wenn this._x z.B. in die nähere Region
von this.x kommt.

Nur mal so marginal erwähnt
Das hast du aber nur so erwähnt, ne?
Ich mein, so beim Überfliegen. Du musst dir das mal ganz genau anschauen.
Ich frag da nämlich mit 'Pytagoras' (der alte Grieche) die Entfernung ab.
Wenn die kleiner als 5, dann deleten und auf Ausgangsstellung.
__________________
Gruß, Jey!
jeypack ist offline   Mit Zitat antworten
Alt 05-01-2005, 17:42   #11 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Oh, wie schlecht von mir
Sorry. Ich bin zugegeben doch
nur drüber geflogen.

G
John
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz 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 00:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele