PDA

Volledige versie bekijken : Roteren


Jarno!
%Europe/Berlin %443 %2010, 10:38
Ik heb 36 plaatjes achter elkaar in een movieclip (3D model dat rond draait). Nu heb ik 2 buttons, om hem linksom en rechtsom te draaien zeg maar ( met nextFrame(); en prevFrame(); ).

En ik heb een var die kijkt of je links om draait of rechtsom. Dan heb ik op het eerste frame van de movieclip met de plaatjes: if var = links ga naar frame 36, en op het laatste if var = rechts ga naar frame 1.

Ten eerste krijg je dan natuurlijk een soort schokje omdat hij het eerste en laatste frame overslaat, en in het begin kan je niet linksom draaien.

Nu vraag me af hoe ik dit beter kan doen? Ik hoop dat het verder een beetje duidelijk is..

Ruubje
%Europe/Berlin %490 %2010, 11:46
gebruik het gedeelte wat in de constructor (public function Main) zit. Wat je doet is als volgt:
- je checkt of je naar links of naar rechts gaat
- als je naar links gaat, check je of je nog wel een frame naar links mag
- ja, ga daar dan heen. anders, ga dan naar het laatste frame

- als je naar rechts gaat, check je of je nog wel een frame naar rechts mag
- ja, ga daar dan heen. anders, ga dan naar het eerste frame

einde :-)

package {
import flash.display.MovieClip;

class Main extends MovieClip {
//string voor links of rechts
var str:String = new String;

public function Main () {

//als links..
if (str == "links")
{
//als het huidige frame -1 nog steeds groter is dan 1..
if ( (this.currentframe -1) > 1)
{
//..ga daarheen
this.gotoAndStop(this.currentframe -1);
} else {
//als dat niet zo is, ga naar het laatste frame
this.gotoAndStop(this.totalFrames);
}
} //end of if (links)

if (str == "rechts")
{
//als het huidige frame +1 nog steeds groter is dan het totale aantal frames..
if ( (this.currentframe +1) < this.totalFrames)
{
//..ga daarheen
this.gotoAndStop(this.currentframe +1);
} else {
//als dat niet zo is, ga naar het eerste frame
this.gotoAndStop(1);
}
} //end of if (rechts)


} //end of function

//end of class and package
}
}

Jarno!
%Europe/Berlin %507 %2010, 12:11
Het klinkt vrij logisch maar ik krijg het niet aan de praat. Hij doet nu niks.

Ik zal even mijn gehele code kopieren:

var richting:String = new String;

/* NEXT BUTTON */

var nextPressed:Boolean = false;
next_btn.buttonMode = true;
next_btn.mouseChildren = false;

next_btn.addEventListener(MouseEvent.MOUSE_DOWN, nextDown);
next_btn.addEventListener(MouseEvent.MOUSE_UP, nextUp);
next_btn.addEventListener(MouseEvent.ROLL_OVER, nextVar);
next_btn.addEventListener(MouseEvent.ROLL_OVER, btnOver);
next_btn.addEventListener(MouseEvent.ROLL_OUT, btnOut);

function nextDown(e:MouseEvent):void{
nextPressed = true;
addEventListener(Event.ENTER_FRAME, goNext);
}
function nextUp(e:MouseEvent):void{
nextPressed = false;
removeEventListener(Event.ENTER_FRAME, goNext);
}
function goNext(e:Event):void{
if(nextPressed){
if (richting == "next"){
if ( (roteren_mc.currentframe +1) < roteren_mc.totalFrames){
roteren_mc.gotoAndStop(roteren_mc.currentframe +1);
} else {
roteren_mc.gotoAndStop(1);
}
}
}
}
function nextVar(e:MouseEvent):void{
richting = "next";
trace(richting);
}


/* PREVIOUS BUTTON */

var prevPressed:Boolean = false;
prev_btn.buttonMode = true;
prev_btn.mouseChildren = false;

prev_btn.addEventListener(MouseEvent.MOUSE_DOWN, prevDown);
prev_btn.addEventListener(MouseEvent.MOUSE_UP, prevUp);
prev_btn.addEventListener(MouseEvent.ROLL_OVER, prevVar);
prev_btn.addEventListener(MouseEvent.ROLL_OVER, btnOver);
prev_btn.addEventListener(MouseEvent.ROLL_OUT, btnOut);

function prevDown(e:MouseEvent):void{
prevPressed = true;
addEventListener(Event.ENTER_FRAME, goPrev);
}
function prevUp(e:MouseEvent):void{
prevPressed = false;
removeEventListener(Event.ENTER_FRAME, goPrev);
}
function goPrev(e:Event):void{
if(prevPressed){
if (richting == "prev"){
if ( (roteren_mc.currentframe -1) > 1){
roteren_mc.gotoAndStop(roteren_mc.currentframe -1);
} else {
roteren_mc.gotoAndStop(roteren_mc.totalFrames);
}
}
}
}
function prevVar(e:MouseEvent):void{
richting = "prev";
trace(richting);
}


/* GEZAMELIJKE FUNCTIES */

function btnOver(e:MouseEvent):void {
e.target.gotoAndStop(2);
}
function btnOut(e:MouseEvent):void {
e.target.gotoAndStop(1);
}

De plaatjes staan dus in roteren_mc met een stop(); op frame 1.

Edit: ik was vergeten alle this' voor roteren_mc te veranderen, nu gaat ie wel 1 frame terug (naar 36) en dan kan ik ook wel 1 frame vooruit (naar 1). Maar meer niet..