Toon posts:

[flash] Event Handling

Pagina: 1
Acties:

Verwijderd

Topicstarter
aan admin: topic titel zou moeten zijn: action handling in flash
zie: [rml][ flash] Event Handeling[/rml]

Ik wil dynamisch een actie knoppen aan een knop (omdat er x- aantal knoppen zijn).
(alpha heb ik erbij gezet om te tonen dat er wel degelijk de juiste referentie wordt gebruikt).

C:
1
2
3
4
5
6
7
var myListener = new Object();
myListener.click = function(e:Object):Void {
    trace("blabla");
    
};
knop.addEventListener("click", myListener.click);
knop._alpha = 50;


De click werkt niet.

C:
1
2
3
4
5
function mouseHandler(){
trace("bla");
}
knop.onPress = mouseHandler()
knop._alpha = 50;


Hierbij wordt "bla" geprint bij het uitvoeren van het script, en niet bij het uitvoeren van de click.

Ik vind het raar dat vele mensen met die probleem zitten maar er blijkbaar geen oplossing voor vinden.
Kan iemand mij over dit dom probleem overhelpen.

[ Voor 8% gewijzigd door Verwijderd op 18-03-2006 18:08 ]


  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 19-02 15:13
moet in het eerste voorbeeld regel 6 niet zijn :

knop.addEventListener("click", myListener);

(dus zonder .click). mijn actionscript is wat roestig...

voorbeeldje uit manual :

code:
1
2
3
4
5
listenerObject = new Object();
listenerObject.click = function(eventObject){
  ...
}
Instance.addEventListener("click", listenerObject)

[ Voor 40% gewijzigd door tech-no-logical op 18-03-2006 18:14 ]


Verwijderd

Topicstarter
het is wel degelijk "myListener.click" dat je moet meegeven. De handere mogelijkheid is een functie meegeven.

edit: zelfs met een copy past van jou code uit de manual lukt het niet. raar é
code:
1
2
3
4
5
listenerObject = new Object();
listenerObject.click = function(eventObject){
  trace("bla");
}
knop.addEventListener("click", listenerObject)


Ziehier de engelstalige uitleg van http://www.learnthat.com/...earn.asp?id=2064&index=59
n the first case, you go about creating the listener the same way you learned earlier. You create a new object to act as a listener for a specific event and execute a resulting action, which is specified in a function:

var myListener = new Object();

(Or, var myListener:Object = new Object();)

myListener.click = function() {

getURL("http://www.macromedia.com");

};

The only difference is that instead of using the addListener method to register the listener with the object, you use the addEventListener method:

myButton.addEventListener("click", myListener);

The addEventListener method has two arguments: the first is the event being broadcast by the object, and the second can be either the listener object or a function. For example, you could use:

myButton.addEventListener("click", myListener.click);

Or you could use:

myButton.addEventListener("click", myFunction);

The first example uses the function defined for a listener object. The second example uses a standalone function that can be reused elsewhere. Really, the two are the same in principle; you’re adding a listener to the button. In the first case, the listener is an object and method you defined. In the second case, the listener is a function. We’re going to use the second method to complete our form.

[ Voor 10% gewijzigd door Verwijderd op 18-03-2006 18:21 ]


  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 19-02 15:13
dit :
code:
1
2
3
4
5
listenerObject = new Object();
listenerObject.click = function(eventObject){
  trace('click');
}
myButton.addEventListener("click", listenerObject)


werkt nochthans feilloos... (met een button genaamd myButton op ''t canvas).

edit : .fla hier

[ Voor 18% gewijzigd door tech-no-logical op 18-03-2006 19:05 ]


Verwijderd

Topicstarter
probleem gevonden maar géén oplossing: Je hebt daar een component Button gebruikt. Ik heb mijn eigen knop gemaakt en er een Button van gemaakt. daardoor werkt het niet.

Wat nu?

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 19-02 15:13
eventlisteners werken alleen bij components (of andere objects die de goede classes implemeteren). de ouderwetse manier is een on(release) statement aan het symbol dat zich gedraagt als button. ik heb de .fla geupdate met een tweede voorbeeld...

Verwijderd

Topicstarter
Hoe kan ik dan in de onRelease de naam van het component oproepen die het uitvoerd

on(press){
trace(this); geeft level0 en niet "myButton"
}

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 19-02 15:13
dat werkt niet met de (oude) manier van event-handling, dan moet je het zo doen :

code:
1
2
3
myOtherButton.onRelease = function() {
    trace(this);
}


(dit script staat in de frame, _niet_ in de instance van myOtherButton, zoals de on(release) code !). leuk he, alle verschillende manieren ?

Verwijderd

Topicstarter
Het werkt: voor mensen die geintresseerd zijn in een dynamisch openklapbaar menu. Hier is de code alvast:-)

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
count = 1;
while(count<20){
    duplicateMovieClip("knop", count, count);
    _root[count]._y = count*knop._height+knop._y;
    _root["expanded"+count]=true;
    
    _root[count].labels =count;
    _root[count].onRelease = function() {
        if(!_root.animate==true){
            expand(this); 
        }
    }
    count +=1;
}


function expand(button:MovieClip){
    var begin;
    var end;
    subItems=5;
    
    var i:Number = Number(button._name);
     i++;
    for(;i<20;i++){
        begin = _root[i]._y;
        if(_root["expanded" + button._name]==true){
            end = _root[i]._y +_root[i]._height*(subItems-1);               
        }else{
            end = _root[i]._y -_root[i]._height*(subItems-1);
        }
        

        time = 20;
        mc = _root[i];      
        ballTween =new mx.transitions.Tween(mc, "_y", mx.transitions.easing.Regular.easeInOut, begin, end, time);               
        _root.animate =true;
    }       
    if(_root["expanded" + button._name]==true){
        begin = button.kader._height;
        end = subItems*button.kader._height;                
    }else{
        begin = button.kader._height;
        end = button.kader._height/subItems;                
        
    }   
    var time = 20;
    var mc = button.kader;
    
     ballTween =new mx.transitions.Tween(mc, "_height", mx.transitions.easing.Regular.easeInOut, begin, end, time);  
     ballTween.onMotionFinished =function(){
        if(_root["expanded"+button._name] == false){
            _root["expanded"+button._name] = true;
        }else{
            _root["expanded"+button._name] = false;
        }
        _root.animate = false;
     }      
}
Pagina: 1