Avatar billede jakwag Nybegynder
29. april 2004 - 10:23 Der er 7 kommentarer og
2 løsninger

Datatype en onPress function i en class file?

Hej

Hvis jeg laver en class file som jeg linker til et mc, og jeg ønsker at deklerare en onPress method på den. Så skal man datatype den. Hvorfor egentlig? Den burde da vide at movieclip classen har en onPress. eller..?

eks.:

class Test extends MovieClip
{
var onPress:Function;

function Test()
{
this.onPress = function()
{
trace("HVORFOR!");
}
}
}

Dette ville ikke virke uden linien:
var onPress:Function;

: ) Jakob
Avatar billede barklund Nybegynder
29. april 2004 - 12:17 #1
I din C:\Programmer\Macromedia\Flash MX 2004\en\First Run\Classes\MovieClip.as finder du:

//****************************************************************************
// ActionScript Standard Library
// Movie Clip object
//****************************************************************************

dynamic intrinsic class MovieClip
{
    var useHandCursor:Boolean;
    var enabled:Boolean;
    var focusEnabled:Boolean;
    var tabChildren:Boolean;
    var tabEnabled:Boolean;
    var tabIndex:Number;
    var hitArea:Object;
    var trackAsMenu:Boolean;

    var _x:Number;
    var _y:Number;
    var _xmouse:Number;
    var _ymouse:Number;
    var _xscale:Number;
    var _yscale:Number;
    var _width:Number;
    var _height:Number;
    var _alpha:Number;
    var _lockroot:Boolean;
    var _visible:Boolean;
    var _target:String;
    var _rotation:Number;
    var _name:String;
    var _framesloaded:Number;
    var _droptarget:String;
    var _currentframe:Number;
    var _totalframes:Number;
    var _quality:String;
    var _focusrect:Boolean;
    var _soundbuftime:Number;
    var _url:String;
    var _parent:MovieClip;

    function getURL(url:String,window:String,method:String):Void;
    function unloadMovie():Void;
    function loadVariables(url:String,method:String):Void;
    function loadMovie(url:String,method:String):Void;
    function attachMovie(id:String,name:String,depth:Number,initObject:Object):MovieClip;
    function swapDepths(mc:Object):Void; // mc can be a String or an Integer
    function localToGlobal(pt:Object):Void;
    function globalToLocal(pt:Object):Void;
    function hitTest():Boolean; // arguments can be either target or x/y/shapeFlag
    function getBounds(bounds):Object;
    function getBytesLoaded():Number;
    function getBytesTotal():Number;
    function attachAudio(id:Object):Void;
    function attachVideo(id:Object):Void;
    function getDepth():Number;
    function getInstanceAtDepth(depth:Number):MovieClip;
    function getNextHighestDepth():Number;
    function setMask(mc:Object):Void; // mc can be a String or a MovieClip
    function play():Void;
    function stop():Void;
    function nextFrame():Void;
    function prevFrame():Void;
    function gotoAndPlay(frame:Object):Void; // frame can be String or Number
    function gotoAndStop(frame:Object):Void; // frame can be String or Number
    function duplicateMovieClip(name:String,depth:Number,initObject:Object):MovieClip;
    function removeMovieClip():Void;http://exp.dk/spm/494708
    function startDrag(lockCenter:Boolean,left:Number,top:Number,right:Number,bottom:Number):Void;
    function stopDrag():Void;
    function createEmptyMovieClip(name:String,depth:Number):MovieClip;
    function beginFill(rgb:Number,alpha:Number):Void;
    function beginGradientFill(fillType:String,colors:Array,alphas:Array,ratios:Array,matrix:Object):Void;
    function moveTo(x:Number,y:Number):Void;
    function lineTo(x:Number,y:Number):Void;
    function curveTo(controlX:Number,controlY:Number,anchorX:Number,anchorY:Number):Void;
    function lineStyle(thickness:Number,rgb:Number,alpha:Number):Void;
    function endFill():Void;
    function clear():Void;
    function createTextField(instanceName:String,depth:Number,x:Number,y:Number,width:Number,height:Number):Void;
    function getTextSnapshot():TextSnapshot;

    function onData():Void;
    function onDragOut():Void;
    function onDragOver():Void;
    function onEnterFrame():Void;
    function onKeyDown():Void;
    function onKeyUp():Void;
    function onKillFocus(newFocus:Object):Void;
    function onLoad():Void;
    function onMouseDown():Void;
    function onMouseMove():Void;
    function onMouseUp():Void;
    function onPress():Void;
    function onRelease():Void;
    function onReleaseOutside():Void;
    function onRollOut():Void;
    function onRollOver():Void;
    function onSetFocus(oldFocus:Object):Void;
    function onUnload():Void;
}

Altså er de to funktioner, som du kan overskrive, men ikke sætte eksplicit:

class Test extends MovieClip {
  function Test() {}
  function onPress():Void {
    trace("HVORFOR!");
  }
}

Sådan tror jeg, at det skal gøres :)

// Morten Barklund
Avatar billede pyroman Nybegynder
29. april 2004 - 12:22 #2
hehe - hvorfor er der sneget sig et link ind midt i koden?
Avatar billede barklund Nybegynder
29. april 2004 - 12:24 #3
Hm, det er ikke sådan, når man i emacs kopierer ved markering og paster ved midter-museklik... :|
Avatar billede jakwag Nybegynder
29. april 2004 - 12:34 #4
?? godt svar, men den fangede jeg ikke :)

du vil altså skrive:

class Test extends MovieClip {
  function Test() {}
  function onPress():Void {
    trace("HVORFOR!");
  }
}
uden var onPress:Function;? eller var det en fejl?

hvis jeg i min egen class skrev:
function onPress():Void;

ville jeg vel godt kunne kunne gå ind senere og deklarere den. Men min class burde vel være en eksakt kopi af MovieClip classen.. og derfor burde jeg ikke behøve at datatype den... eller?
Avatar billede barklund Nybegynder
29. april 2004 - 13:00 #5
Okay okay, du får din vilje. Nu åbner jeg rent faktisk programmet. Øjeblik :)
Avatar billede barklund Nybegynder
29. april 2004 - 13:07 #6
Jeg kan kun sige - hvad er din problem?

Det virker fint for mig med:

class Test extends MovieClip {
  function Test() {
    onPress = function(){trace("bah");};
  }
}

Og AS med et symbol i library linket til klassen og en instantiering:

this.attachMovie("test", "t", 1);

Jeg klikker og får "bah" - ingen fejl der :)

http://actionscript.dk/eksperten/mcextend_event/

// Morten Barklund
Avatar billede jakwag Nybegynder
29. april 2004 - 16:20 #7
Hhhmm.. ;| Jeg er blevet bildt noget ind kan jeg se, det virker jo fint..! S#*tans macromedia, det er absolut ikke første gang... men så giver det hele jo osse mening :)

Tak for hjælpen.
Avatar billede jakwag Nybegynder
29. april 2004 - 16:21 #8
Jeg er ked af at du blev nød til at åbne programmet unødigt... :D
Avatar billede barklund Nybegynder
29. april 2004 - 16:22 #9
Ja, det må du sgu nok sige :]

Tark for points :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester