Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-11-2011, 10:03   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2006
Beiträge: 855
as2 scoller in as3 umschreiben?

um ein mc in y richtung zu scrollen benutzte ich folgende code.

PHP-Code:
mc.onEnterFrame = function() {
        if(
this._height this._parent.mask._height){
            
this._y 0;
            
this._parent.bg._height this._height;
            
delete this.onEnterFrame;
        }else{
            
this._parent.bg._height 250;
        }
        if(
this._parent.mask.hitTest(_root._xmouse,_root._ymouse)){
            
this._y += Math.cos((-this._parent._ymouse/this._parent.mask._height)*Math.PI)*5;
            if (
this._y 0) {
                
this._y 0;
            }
            if (-
this._y>(this._height-this._parent.mask._height)){
                
this._y = -(this._height-this._parent.mask._height);
            }
        }
    } 
wie kann ich dies in as3 umschreiben bzw. ist es möglich ohne hitTest mehr?
palpalo ist offline   Mit Zitat antworten
Alt 17-11-2011, 11:46   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.325
flash.display.DisplayObject - ActionScript® 3.0 Reference for the Adobe® Flash® Platform

hitTestObject(obj: DisplayObject):Boolean
Evaluates the bounding box of the display object to see if it overlaps or intersects with the bounding box of the obj display object.

hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean
Evaluates the display object to see if it overlaps or intersects with the point specified by the x and y parameters.

da ist immer noch alles da ;-) heisst nur etwas anders
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 17-11-2011, 12:16   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2006
Beiträge: 855
danke habs dann so versucht

PHP-Code:
function move_mc(e:Event):void {
    if(
my_mc.width my_mc_mask.width){
        
my_mc_mask.width my_mc.width;
         
my_mc.= (my_mc.stage.stageWidth 2) - (my_mc.width 2);
          
my_mc_mask.= (my_mc_mask.stage.stageWidth 2) - (my_mc_mask.width 2);
        
removeEventListener(Event.ENTER_FRAME,move_mc)
    }else{
        if(
my_mc.hitTestPoint(mouseX,mouseY,true)){
            
my_mc.+= Math.cos((-my_mc.mouseX/my_mc_mask.width)*Math.PI)*5;
            if (
my_mc.0) {
                
my_mc.0;
            }
            if (-
my_mc.x>(my_mc.width-my_mc_mask.width)){
                
my_mc.= -(my_mc.width-my_mc_mask.width);
            }
        }
    } 
skrollen klappt, aber wenn aber ein andere content in my_mc lade, der länger oder kürzer ist, überlappert sich der x pos, von mc.

wenn content inhalt, schammler als stage breite ist, soll my_mc & maske zentriert werden, und funktion zum skrollen entfernt werden, klappt aber nicht.

edit: füge noch fla eventuell kann jemand mir weiter helfen.
Angehängte Dateien
Dateityp: fla _scroller.fla (7,9 KB, 2x aufgerufen)

Geändert von palpalo (17-11-2011 um 12:39 Uhr)
palpalo ist offline   Mit Zitat antworten
Alt 17-11-2011, 12:56   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.325
grundsätzlich:

es gibt (sollte geben) eine schieber componente. diese sollte unabhängig von dem was geschoben werden soll einen wert von 0..1 (also 0 bis 100%) ausgeben.
dieser wert wird entweder mit einem eigenen event versendet oder mit einer callback-funktion (also eine funktion die man der componente übergibt und die aufgerufen wird, wenn sich was ändert). event ist besser.
man muss einen schieber durch einen anderen ersetzen können, ohne das die restliche programmierung nachgebessert werden muss.
durch den 'umweg' über den prozentwert kannst du z.b. gleichzeitig den inhalt scrollen. irgendwo anders noch die scrollprozente anzeigen, rechtzeitig nachladen anstossen usw.
durch deine direkte programmierung ist dein script unübersichtlich, schlecht auf fehler zu prüfen und muss bei jeder kleinen änderung komplett überarbeitet werden.

dann hast du ein objekt, das gemäss dem prozentwert verschoben wird.
0% entspricht, der zu scrollende inhalt steht oben bündig
100% entspricht, der zu scrollende inhalt steht unten bündig (falls was übersteht)

für einen scroller benützt man nicht ENTER_FRAME sondern MOUSE_MOVE.

ein ändern des inhaltes ändert nichts daran, das die schieber-componente z.b. 30% schieben ansagt.

und hier und da mal einen kleinen erklärende text wäre nett. weil z.b. was hat sowas Math.cos in einem scroller zu suchen? ist das ein drehregler?


demnach solltest du ändern:
ENTER_FRAME auf MOUSE_MOVE umstellen
schreibe einzelne überschaubare funktionen. u.a. das da 'my_mc.x =' raus.

[edit]die fla kam dazu, nachdem ich diesen text geschrieben habe.
und ach nööö, dein script ist so (sorry) verkorkst. entflechte das erstmal nach den empfehlungen, danach guck ich noch mal drüber ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (17-11-2011 um 13:25 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 18-11-2011, 12:10   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2006
Beiträge: 855
auch mit mouse move immer noch selbe effekt.

palpalo ist offline   Mit Zitat antworten
Alt 18-11-2011, 13:11   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.325
ja, etwas mehr muss schon sein.

nur am rande:
- mach deine texte 'nicht eingebbar' (bei den properties das Ab-symbol ausklicken) sonst fängt dir das textfeld den mausklick ab.
- die buttons sind gleich (bis auf den titel) da erstellt man in der bibliothek eins und den text via programm reinschreiben. oder die textfelder getrennt vom button eine ebene drüber legen.

ansonsten habe ich an der fla mal rumgefummelt. nicht schön, aber ich hoffe es ist so wie du das willst, bzw. das du damit weiter kommst.
Angehängte Dateien
Dateityp: fla _scroller.fla (42,5 KB, 4x aufgerufen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 18-11-2011, 17:53   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2006
Beiträge: 855
Zitat:
Zitat von hgseib Beitrag anzeigen
ja, etwas mehr muss schon sein.

nur am rande:
- mach deine texte 'nicht eingebbar' (bei den properties das Ab-symbol ausklicken) sonst fängt dir das textfeld den mausklick ab.
- die buttons sind gleich (bis auf den titel) da erstellt man in der bibliothek eins und den text via programm reinschreiben. oder die textfelder getrennt vom button eine ebene drüber legen.

ansonsten habe ich an der fla mal rumgefummelt. nicht schön, aber ich hoffe es ist so wie du das willst, bzw. das du damit weiter kommst.
danke klappt bestens


habs noch so erweitert

PHP-Code:

function scroller(){
    if(
my_mc.width stage.stageWidth){
        
my_mc.removeEventListener(Event.ENTER_FRAME,eventEnterFrame);
        
my_mc_mask.width my_mc.width;
        
my_mc.= (my_mc.stage.stageWidth my_mc.width)/2;
        
my_mc_mask.= (my_mc_mask.stage.stageWidth my_mc_mask.width)/2;
    }else{
        
my_mc_mask.width stage.stageWidth;
        
my_mc.0;
        
my_mc_mask.0;
    }
    
scrollMax 0;
    
scrollMin my_mc_mask.width-my_mc.width// !! achtung, ist negativ
    
if(scrollMax-scrollMin>0){
        
addEventListener(MouseEvent.MOUSE_MOVEeventMouseMove);
    }
    
//
    //
    // maus hat sich bewegt! 
    
const SPEED:Number 5;
    var 
scrollspeed:Number 0;
    function 
eventMouseMove(evt:Event):void {
        if (
my_mc_mask.hitTestPoint(mouseX,mouseY))    {
            if (
mouseX<my_mc_mask.width/4)    {
                
// maus links, dann scrolle nach links
                
scrollspeed SPEED;
                
my_mc.addEventListener(Event.ENTER_FRAME,eventEnterFrame);
            }
            else if (
mouseX>stage.stageWidth-my_mc_mask.width/4){
                
// maus rechts, dann scrolle nach rechts
                
scrollspeed = -SPEED;
                
my_mc.addEventListener(Event.ENTER_FRAME,eventEnterFrame);
            }
            else{
                
// maus in der mitte, dann nicht scrollen
                
scrollspeed 0;
                
my_mc.removeEventListener(Event.ENTER_FRAME,eventEnterFrame);
            }
        }
    }
    
    function 
eventEnterFrame(evt:Event):void {
        
my_mc.+= scrollspeed;
        
// 
        
if (scrollspeed<&& my_mc.x<scrollMin)    {
            
my_mc.x=scrollMin;
            
my_mc.removeEventListener(Event.ENTER_FRAME,eventEnterFrame);
        }
        else if (
scrollspeed>&& my_mc.x>scrollMax){
            
my_mc.x=scrollMax;
            
my_mc.removeEventListener(Event.ENTER_FRAME,eventEnterFrame);
        }
    }

wenn ich jetz mause event nicht brauche lösche ich es so

PHP-Code:
removeEventListener(MouseEvent.MOUSE_MOVE,scroller); 
scheint zu gehen, muss ich aber scroller funktion selb als event angeben oder geht es einfach wie oben ich es gemacht habe.
palpalo ist offline   Mit Zitat antworten
Alt 19-11-2011, 01:42   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.325
Zitat:
Zitat von palpalo Beitrag anzeigen
wenn ich jetz mause event nicht brauche lösche ich es so
removeEventListener(MouseEvent.MOUSE_MOVE,scroller );
scheint zu gehen, muss ich aber scroller funktion selb als event angeben oder geht es einfach wie oben ich es gemacht habe.
nein, das geht nicht.

es wird ein listener erstellt.
auf ein objekt bezogen (wenn vor addEventListener nichts steht, dann ist this das objekt)
als parameter wird ein string (name des events) und eine funktion übergeben.
wenn das gleichnamige event zu diesem objekt gesendet wird, dann wird die angegebene funktion ausgeführt.

entfernen
um den listener zu löschen müssen die selben parameter angegeben werden, wie bei dessen erstellung.
dein befehl würde einen listener entfernen, wenn es einen mit exakt diesen parametern geben würde.
den gibt es aber nicht. removeEventListener meldet nie einen fehler.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (19-11-2011 um 01:57 Uhr)
hgseib 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Scoller Mousewheel Mac Firefox falter80 Flash CS3 Professional 8 04-11-2010 14:27
[Flash CS3] Text Scoller mit Hintergrund... (CS3) SergeantBosco Flash Einsteiger 2 08-03-2009 10:52
Scoller - Dynamische Inhalt palpalo Flash Einsteiger 9 22-08-2007 22:44
Dyn. Textfeld mit Scoller / Zeichenanzahl erkennen deak Flash 8 0 05-07-2007 10:37
Scoller onPress, onRollover nur zu 90% flashversuch ActionScript 2 7 26-02-2006 09:32


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele