Comunidad de diseño web y desarrollo en internet online

La dirección/sentido en mcs en movimiento

Citar            
MensajeEscrito el 15 Jul 2008 12:16 pm
Buenas a todos,
Intentando hacer un mc al que se pudiese controlar con las flechas de dirección del teclado, logré que girase sobre sí mismo, darle una velocidad inicial, velocidad máxima, frenado... Y en el último paso (quizás en el más importante) me falló mi nivel en actionscript:
Estaba tratando de conseguir que el mc cambiara de dirección mientras este se movia pero lo único que conseguí fue crear un movimiento antinatural sobre los ejes x e y.
Entonces, estaría buscando un código que hiciese rotar los ejes de coordenadas o algo parecido. ¿Es eso posible? (No me gustaría que se moviese estilo comecocos: izqda, dcha, arriba y abajo; sino, más bien algo que vaya por ángulos)

¿Alguien me podría ayudar con el código en actionscript, si digo que me gustaría que estuviese dentro del mc y no en una capa de acciones? (Apuntarme aún así el script de la capa de acciones con una explicacioncilla si así sabéis, pero no lo estoy buscando)^^

(Si el código para girar los ejes de coordenadas está en un mc que a su vez está dentro de otro mc, se supone que no afecta al resto del escenario... ¿verdad?)

:) Gracias :)

Por ¡dol0

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Jul 2008 02:50 pm
En realidad lo que creas es un vector, que computa una velocidad, aceleración, desaceleración por fricción (si aplica en tu juego) Un ejemplito simple de un autito movido por las teclas:

Código :

// You need to specify the width and Height of the stage if you don't want it to go past the edges
stageW = 700;
stageH = 550;
function racecar() {
   // Make the starting position of the car
   this._x = this.x=stageW/2;
   this._y = this.y=stageH/2;
   // Velocity of car
   this.xvelocity = this.yvelocity=0;
   // Tire Speed
   this.tspeed = 0;
   // Angle of car
   this.angle = 0;
   // The friction acting on the tires from the ground
   this.tfriction = .05;
   // This determines the angle that the car is steering
   this.steering = 0;
   this.onEnterFrame = function() {
      // This determines what these variables do
      keyLeft = Key.isDown(Key.LEFT);
      keyRight = Key.isDown(Key.RIGHT);
      //the reason why these two are not capitilized any is because "keyUp" and"keyDown" are commands in flash
      keyup = Key.isDown(Key.UP);
      keydown = Key.isDown(Key.DOWN);
      // By pushing on certain keys, you get acceleration and decceleration
      if (keyup) {
         this.tspeed += 1;
      }
      if (keydown) {
         this.tspeed -= 1.5;
         if (this.tspeed<-7.5) {
            this.tspeed = -7.5;
         }
      }
      // Friction from ground; this can be any small number so that the car doesn't keep going
      // if a key isn't pressed
      this.tspeed *= .95;
      // Velocity Change
      idealxvelocity = this.tspeed*Math.cos(this.angle*Math.PI/180);
      idealyvelocity = this.tspeed*Math.sin(this.angle*Math.PI/180);
      // By taking the difference between the current velocity and ideal velocity,
      // you get the actual velocity
      // When you apply the friction, you get the actual velocities.
      this.xvelocity += ((idealxvelocity-this.xvelocity)*this.tfriction);
      this.yvelocity += ((idealyvelocity-this.yvelocity)*this.tfriction);
      // By adding the velocities, you can get the new x and y positions
      this.x += this.xvelocity;
      this.y += this.yvelocity;
      // By pushing the Left and Right keys, the car steers in that direction
      if (keyLeft || keyRight) {
         this.steering += (keyRight-keyLeft);
      } else {
         // When you let go of the Left and Right keys, the car goes back to going straight
         this.steering += ((this.steering<0)-(this.steering>0));
      }
      // You want to make sure that when you steer that it doesn't start turning faster and faster
      if (this.steering<-10) {
         this.steering = -10;
      }
      if (this.steering>10) {
         this.steering = 10;
      }
      // Now you can make the car turn based on actual speed and turning angle
      actualSpeed = Math.sqrt((this.xvelocity*this.xvelocity)+(this.yvelocity*this.yvelocity));
      this.angle += ((this.steering*actualSpeed)*.02);
      this._angle = (this.angle+360)%360-180;
      // Hit outside
      if (this.x>=700) {
         this.x = 700;
      }
      if (this.x<=5) {
         this.x = 5;
      }
      if (this.y>=550) {
         this.y = 550;
      }
      if (this.y<=-10) {
         this.y = -10;
      }
      // You need to update the angles from radians to degrees so that it can turn
      this._rotation = this.angle+90;
      this._x = this.x;
      this._y = this.y;
   };
}
// Last but not least, you need to attach the car to the screen with the function for its controls
Object.registerClass("car", racecar);
_root.attachMovie("car", "mcCar", 200);


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Jul 2008 08:25 am
Vale... ciertamente se podría hacer así (o por lo menos de una forma similar), pero lo que dijiste de los vectores fue una gran ayuda. Pese a que se resolvió agregando una capa especialmente para acciones, se utilizó el comando "moveObj(mc, nº velocidad)" que sí gira los ejes internos "x" e "y" del mc, habiendo creado un vector resultante y un vector inicial del mc anteriormente, para saber la direccion y el sentido del giro a efectuar. Funciona realmente bien, aunque a mi parecer no tendría ese nivel de dificultad si se pudiese hacer escribiendo en el mc.
Bueno, pues :wink: MUCHAS GRACIAS :wink:
y ya hablamos ^^

Por ¡dol0

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Jul 2008 11:41 am
Si escribes en el MC y necesitas por ejemplo dos autos, entonces tendrías el código dos veces y ni hablar si necesitas hacer algún cambio pues lo tienes que hacer tantas veces como movies tengas, por lo tanto para mayor organización y optimización es recomendable no tener el código encima de los objetos (ya en AS3 esto no es posible, es mejor ir acostumbrandose para cuando llegue la hora de migrar)

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.