PDA

Volledige versie bekijken : Object bewegen na muisklik


Thal
%Europe/Berlin %599 %2008, 15:23
Voor school gaan we in groep een game maken dat gebaseerd is op
http://www.ferryhalim.com/orisinal/g3/bells.htm
We zouden hierbij willen dat het karakter springt naar de plaats waar je klikt met je muis. Als er daar geen object staan (en er dus geen hittest is) moet het karakter weer naar beneden vallen.

Maar bij het verplaatsen van het karakter (het konijn in het voorbeeldspelletje) loopt het reeds mis. Het beweegt namelijk maar een klein beetje en gaat niet volledig naar de aangeklikte plaats.
We zijn niet echt geweldige flashkenners en het is al behoorlijk lang geleden dat we er nog mee gewerkt hebben dus het zal ongetwijfeld een geweldig domme fout zijn maar dit is dus onze code:

onClipEvent (load) {
_x = 175;
_y = 530;
speed = 5;
}
onClipEvent(mouseDown) {
eindX = _root._xmouse;
eindY = _root._ymouse;
_x += (eindX-_x)/speed;
_y += (eindY-_y)/speed;
}


Als iemand een tip heeft over hoe we dit kunnen oplossen of hoe we dit beter kunnen coderen, laat dan maar iets achter

Dauntless
%Europe/Berlin %608 %2008, 15:36
Beter coderen -> Gebruik geen verouderde AS1 (op de buttons), maar gebruik AS1/2 op frames.

Waarom het niet werkt: Omdat hij de code ook maar 1x uitvoert (namelijk, wanneer je klikt). Je moet de animatie in een onEnterFrame zetten.

De volledige code wordt zoiets achtigs (konijn is de instancenaam van je konijntje)
konijn._x = 175;
konijn._y = 530;
var speed:Number = 5;
var eindX:Number;
var eindY:Number;
this.onMouseDown = function()
{
eindX = _xmouse;
endY = _ymouse;
this.onEnterFrame = moveBunny;
}
function moveBunny()
{
konijn._x += (endX - konijn._x) / speed;
konijn._y += (endY - konijn._y) / speed;
}
Dit gaat overigens wel niet even realistisch zijn als in het spel: Je laat hem nu naar je muis toe easen terwijl hij moet springen. Springen gebeurt door een vy (y velocity) bij te houden. Elke frame (dus in een onEnterFrame) trek je daar de zwaartekracht af en tel je de resterende vy op bij de _y. Wanneer je een 'belletje' raakt, moet jje de vy terug op een hoge (vaste) waarde zetten zodat hij terug heel hoog springt.
Voor de x as doe je dan simpelweg: "als muis links is van konijntje, konijntje.x --. Als muis rechts is van konijntje, konijntje._x ++"

Thal
%Europe/Berlin %611 %2008, 15:41
Beter coderen -> Gebruik geen verouderde AS1 (op de buttons), maar gebruik AS1/2 op frames.

Waarom het niet werkt: Omdat hij de code ook maar 1x uitvoert (namelijk, wanneer je klikt). Je moet de animatie in een onEnterFrame zetten.

De volledige code wordt zoiets achtigs (konijn is de instancenaam van je konijntje)
konijn._x = 175;
konijn._y = 530;
var speed:Number = 5;
var eindX:Number;
var eindY:Number;
this.onMouseDown = function()
{
eindX = _xmouse;
endY = _ymouse;
this.onEnterFrame = moveBunny;
}
function moveBunny()
{
konijn._x += (endX - konijn._x) / speed;
konijn._y += (endY - konijn._y) / speed;
}
Dit gaat overigens wel niet even realistisch zijn als in het spel: Je laat hem nu naar je muis toe easen terwijl hij moet springen. Springen gebeurt door een vy (y velocity) bij te houden. Elke frame (dus in een onEnterFrame) trek je daar de zwaartekracht af en tel je de resterende vy op bij de _y. Wanneer je een 'belletje' raakt, moet jje de vy terug op een hoge (vaste) waarde zetten zodat hij terug heel hoog springt.
Voor de x as doe je dan simpelweg: "als muis links is van konijntje, konijntje.x --. Als muis rechts is van konijntje, konijntje._x ++"

Bedankt voor de tip!