AW: Flash Butten verlinken
folgendes wollen wir machen:
myMc.onRollOver = function(){}
myMc.onRollOut = function(){}
myMc.onPress = function(){}
myMc.onRelease = function(){}
in AS3 siehts dann so aus...
import flash.display.MovieClip;
import flash.events.MouseEvent;
myMc.addEventListener(MouseEvent.ROLL_OVER, onRollOverHandler);
myMc.addEventListener(MouseEvent.ROLL_OUT, onRollOutHandler);
myMc.addEventListener(MouseEvent.CLICK, onClickHandler);
myMc.addEventListener(MouseEvent.MOUSE_DOWN, onPressHandler);
myMc.addEventListener(MouseEvent.MOUSE_UP, onReleaseHandler);
// if you want a hand cursor
myMc.buttonMode = true;
myMc.useHandCursor = true;
function onRollOverHandler(myEvent:MouseEvent){
trace(“Over”);
}
function onRollOutHandler(myEvent:MouseEvent){
trace(“Out”);
}
function onClickHandler(myEvent:MouseEvent){
trace(“I waited for Press AND Release!!!”);
}
function onPressHandler(myEvent:MouseEvent){
trace(“Press”);
}
function onReleaseHandler(myEvent:MouseEvent){
trace(“Release”);
}
hier ein paar fakten:
1) onRollOver is wird nicht mehr genutzt
2) In AS3, agieren MovieClips nicht mehr als buttons weil sie listeners besitzen - man muß sie anweisen buttons zu sein.
3) wenn du eine fehlermeldung bekommst:
ArgumentError: Error #1063: Argument count mismatch on… Expected 0, got 1.
brauchst du anyEventVarYouLike:MouseEvent innerhalb der Klammern deiner function - z.b.
function myRollOver(args:MouseEvent){}.
4) bei diesem error:
1046: Type was not found or was not a compile-time constant: MouseEvent
hast du....
import flash.events.MouseEvent
.
---vergessen...
5) nochn fehler/error:
ReferenceError: Error #1056: Cannot create property buttonMode on flash.display.Bitmap.
at …
muss das bitmap in den MovieClip - in etwa so:
var MC:MovieClip = new MovieClip();
MC.addChild(theBitmap);
Hoffe das hilft als erklärung wie man in AS3 Buttons aus MCs machen kann - ja auch ich will AS2 zurück...war irgendwie einfacher (mein Trollgehirn will sich nicht umstellen...AS3 kommt mir vor wie Winterzeit-die hass ich auch).
SCHLÄFST DU SCHON ODER CODEST DU NOCH?^^...
wer dann noch interesse hat und bei der relativ langweiligen Grundlagenmaterie noch wach ist ...
(myText.onZuvielLesen = function(Augenkrebs){})
:
anbei eine Klasse die das ganze einfacher macht...
//here’s an EasyButton class I created that will let you do this much quicker.
//To apply it to an item on stage, give it the base class of ‘EasyButton’ and
//class of ‘EasyButton.instanceName’
package
{
import flash.display.*;
import flash.events.*;
import flash.text.*;
public class EasyButton extends MovieClip
{
private var __onClick:Function;
public function EasyButton()
{
__onClick = function(){};
this.buttonMode = true;
this.useHandCursor = true;
this.addEventListener(MouseEvent.CLICK, __onClick);
this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
this.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
this.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
this.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
this.gotoAndStop(”up”); // initial state
}
public function set onClick(func:Function):void
{
this.removeEventListener(MouseEvent.CLICK, __onClick);
__onClick = func;
this.addEventListener(MouseEvent.CLICK, __onClick);
}
public function get onClick():Function
{
return __onClick;
}
function onMouseOver(event:Event):void
{
this.gotoAndStop(”over”);
}
function onMouseOut(event:Event):void
{
this.gotoAndStop(”up”);
}
function onMouseDown(event:Event):void
{
this.gotoAndStop(”down”);
}
function onMouseUp(event:Event):void
{
this.gotoAndStop(”up”);
}
}
}
Nochwas zum dran denken:.. when man children in dem buttonMode MovieClip (eg: TextField, for label), muss seine mouse interaction auf false gesetzt werden, denn sonst, ist immer beim mouse over MC, pointer cursor das ziel, und nicht wie gewünscht handcursor
.
The script will look like this:
private function initMovieButton():void {
this.buttonMode = true;
this.useHandCursor = true;
this.mouseChildren = false;
}
wer das ganze nochmal in English nachvollziehen will hier das Tut dazu: