as3 - van class naar instance ?
23 maart 2009 - 21:39   
geplaatst door: Timmy
hallo allen

Ik zit al een redelijke tijde te klooien met het volgende script.

Wat nu mogelijk is, is dat de class aan één object te koppelen.
Maar wat ik wil is dat dit een algemene script wordt
voor de volgende instances:
section1
section2
section3
section4
section5

wat het nu nog doet is "objecto" spawnen op een bepaalde locatie.

Hoe kan ik var b koppelen aan de instances?
Oftewel, hoe krijg ik deze script aan de praat
i.c.m. mijn instances?

Het zou me enorm uit de brand helpen. Ik ben
al een zeer lange tijd bezig, maar zonder succes.


package {
import flash.display.MovieClip;
import flash.events.*;

public class Tarjeta extends MovieClip {
private var _titulo:Number;
private var m;
private var inercia;
private var inx;
private var iny;
private var r;
private var min;
private var originx;
private var originy;
private var originr;
private var c;
private var vr;
private var torque;
private var vx;
private var vy;
private var modo;
private var modo_time;
private var mxx;
private var my;
private var rooy;
private var mx0;
private var my0;
private var dmx;
private var dmy;
private var fx;
private var fy;
private var ldx;
private var ldy;
private var mlength;
private var mforce;
private var k;
private var kx;
private var ky;
private var addx;
private var addy;
private var cos;
private var sin;
private var nombre;


public function Tarjeta() {
var b:objeto = new objeto();
b.x=stage.stageWidth/2;
b.y=stage.stageHeight/2;
stage.addChild(b);
//
originr=r=b.rotation;
originx=inx=b.x;
originy=iny=b.y;
torque=vr=vx=vy=0;
c=1.2;
min=m=1;
inercia=600;
modo_time = 1;
//
b.addEventListener(Event.ENTER_FRAME, mover);
b.addEventListener(MouseEvent.MOUSE_DOWN, pulsa);
b.addEventListener(MouseEvent.MOUSE_UP, suelta);
}
public function pulsa(e:MouseEvent) {
trace("pulsa");
modo = 1;
modo_time = 1;
}
public function suelta(e:MouseEvent) {
if (e.target.name == "instance2") {
modo = 2;
trace("suelta dentro");
} else {
modo = 2;
trace("suelta fuera");
}
}
public function mover(e:Event) {
if (modo == 1) {
if (modo_time == 1) {
modo_time = 0;
mxx = stage.mouseX;
my = stage.mouseY;
mx0 = mxx;
my0 = my;
dmx = mxx-mx0;
dmy = my-my0;
} else {
mxx = (stage.mouseX+mxx)/2;
my = (stage.mouseY+my)/2;
dmx = mxx-mx0;
dmy = my-my0;
mx0 = mxx;
my0 = my;
}
fx = (dmx-vx)*m;
fy = (dmy-vy)*m;
ldx = mxx-inx;
ldy = my-iny;
if (fx == 0) {
mlength = ldx;
mforce = fy;
torque = mforce*mlength;
} else if (fy == 0) {
mlength = ldy;
mforce = fx;
torque = -(mforce)*mlength;
} else {
k = fy/fx;
kx = (-(k)*k*ldx+k*ldy)/(-(k)*k-1);
ky = k*(kx-ldx)+ldy;
mlength = Math.sqrt(kx*kx+ky*ky);
mforce = Math.sqrt(fx*fx+fy*fy);
if (fx*ky>0) {
torque = -(mforce)*mlength;
} else {
torque = mforce*mlength;
}
}
vx = dmx;
vy = dmy;
inx += vx;
iny += vy;
vr = vr-torque/inercia;
ldx = mxx-inx;
ldy = my-iny;
cos = Math.cos(vr/180*Math.PI);
sin = Math.sin(vr/180*Math.PI);
addx = ldx*cos+ldy*sin-ldx;
addy = -(ldx)*sin+ldy*cos-ldy;
inx += -(addx);
iny += -(addy);
} else if (modo == 2) {
if (modo_time == 1) {
modo_time = 0;
vx = vx-(addx);
vy = vy-(addy);
}
torque = 0;
addx = 0;
addy = 0;
inx += vx;
iny += vy;
}
r -= vr;
e.currentTarget.x = inx;
e.currentTarget.y = iny;
e.currentTarget.rotation = r;
vx = vx/c;
vy = vy/c;
vr = vr/c;
}

}
}

as3 - van class naar instance ?
24 maart 2009 - 08:19    reactie #1
geplaatst door: mvdg
Een class is een soort bouwaanwijzing voor een bepaald type object. De class bevat functies die het object iets kunnen laten doen.

Maar deze bouwaanwijzing wordt pas daadwerkelijk gebouwd als je het commando geeft om een object aan te maken. Dat gebeurt met 'new'.

Dus als je een class hebt gedefinieerd met


class apparaat {

function apparaat() { ...  } // deze wordt vanzelf uitgevoerd als je een nieuw apparaat aanmaakt!
function doeIets() { ... }
function doeNogIets() { ... }

}

dan kun je daadwerkelijk het apparaat aanmaken met


var apparaat1 = new apparaat();

Wil je meerdere van diezelfde apparaten aanmaken? Makkelijk:


var apparaat1 = new apparaat();
var apparaat2 = new apparaat();
var apparaat3 = new apparaat();

Nu heb je er 3.

Als dit wat te algemeen is of te snel gaat, dan moet je echt even op zoek naar een goed boek over Actionscript 3, of zelfs over Object georienteerd programmeren in het algemeen. Want deze principes gelden niet alleen voor AS3 maar voor bijna alle moderne programmeertalen zoals Javascript, PHP, Objective C (waarin Mac programma's worden geschreven).

Mitch Design : websites en interactieve toepassingen : http://www.mitchdesign.nl
as3 - van class naar instance ?
24 maart 2009 - 10:02    reactie #2
geplaatst door: Timmy
Ah bedankt!

Ik snap wat je bedoeld.
Daarnaast ga ik (binnenkort) met de Lynda
AS3 voor flash bezig. Maarja eerst de drukte
weg werken.

Bedankt voor je reactie. Ik ga er mee knoeien.