Comunidad de diseño web y desarrollo en internet online

Lanzar objetos as2

Citar            
MensajeEscrito el 14 Mar 2011 08:22 pm
Estoy armando algo y tengo un par de dudas. Tengo armado un codigo para poder arrastrar un objeto:

Código ActionScript :

objeto1.onPress=function(){
startDrag(this);
}
objeto1.onRelease=objeto1.onReleaseOutside=function(){
stopDrag();

objeto1.myHomeX=objeto1._x;
objeto1.myHomeY=objeto1._y;

objeto1.onMouseDown=function(){
mousePressed=true;
}

objeto1.onMouseUp=function(){
mousePressed=false;
}
objeto1.onEnterFrame=function(){
if(mousePressed==false){
this._x-=(this._x-this.myHomeX)/5;
this._y-=(this._y-this.myHomeY)/5;
}
} 


Muy simple no?, ok. Lo que tengo hasta ahi es un simple drag an drop, cuando lo agarro y lo muevo, al soltarlo vuelve a su sitio.

Lo que yo quiero hacer es que no vuelva a su sitio, sino tener su punto inicial como punto de partida porque quiero lanzarlo.

Quiero que al agarrarlo, lo pueda "estirar" un poco con el drag y al soltarlo pase por donde estaba su posicion inicial y siga, al llegar a las "paredes" va a rebotar porque tengo armado un codigo para eso, pero no logro hacer lo que les comento. Despues tengo que ver el tema de poner gravedad y velocidad, si tienen algun ejemplo de lo que quiero estaria bueno que me lo pasaran por favor, pero con responder lo que pregunte estoy contento, saludos!.

Por Skuash

40 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina.

firefox
Citar            
MensajeEscrito el 15 Mar 2011 02:42 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Mar 2011 07:39 pm
Gracias por la info, pero no lo hago en as2 por capricho. Yo programo en 3, pero en el laburo me dieron esto que esta en un site todo en as2, y tiene que estar SI O SI en as2.

Por Skuash

40 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina.

firefox
Citar            
MensajeEscrito el 16 Mar 2011 02:52 am
Supongo que tendras que multiplicar fuerza x distancia, esto suponiendo hacer un efecto "resortera"

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 16 Mar 2011 03:47 pm
Puedes hacer un tween. En el eje X, el tween es desde el punto donde esta el raton en el momento de soltar el objeto y en el eje Y el tween es la distancia en Y del objeto cuando lo sueltas menos la distancia original del objeto, eso multiplicado por dos.
Eso es lo mas facil que se me ocurre para hacer un juego tipo 'angry birds' :)

PD: Tweener por ejemplo tiene beziers que podria servir para simular gravedad.

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 16 Mar 2011 04:21 pm
Tengo la siguiente clase, aca el objeto es lanzado y rebota en las paredes y se va frenando. Pero no puedo agregarle que a X altura, aparezca la gravedad y haga caer al objeto.

La clase funciona de 10, la funcion enterFrameGravity definitivamente esta mal, si la pruebo en el fla sin esta clase, la pelota cae y tiene un "rebote" sutil y termina en el piso, pero no puedo meter ese codigo en esta clase, lo ideal seria que si la "ball._y" es = o menor a 40 la gravedad la haga bajar hasta el suelo con el rebote del codigo.

Código ActionScript :

class MomentumObject extends MovieClip {
   
   private static var DAMPING_FACTOR           = 0.98;
   private static var MAX_SPEED                     = 40;
   private static var MIN_SPEED                      = 0.5;
   private static var CONSTRAIN_TO_STAGE    = true;
   
   private var lastFramePosition   :Object;
   private var velocity                   :Object;
   private var isDragging               :Boolean;
   private var ball                         :MovieClip;
   

   function MomentumObject () {
      this.lastFramePosition   = new Object();
      this.velocity                  = new Object();
      
      this.lastFramePosition.x = 0;
      this.lastFramePosition.y = 0;
      this.velocity.x = 0;
      this.velocity.y = 0;
      this.isDragging = false;
      

      this.onEnterFrame       = enterFrameHandler;
      this.onPress                 = pressHandler;
      this.onRelease             = releaseHandler;
      this.onReleaseOutside = releaseHandler;
      this.onEnterFrame       = enterFrameGravity;
   }
   

   function enterFrameHandler () : Void {
      if (this.isDragging) {

         this.velocity.x = this._x - this.lastFramePosition.x;
         this.velocity.y = this._y - this.lastFramePosition.y;
         

         if ( Math.sqrt(this.velocity.x*this.velocity.x + this.velocity.y*this.velocity.y) > MomentumObject.MAX_SPEED ) {
            var velAng:Number = Math.atan2( this.velocity.y, this.velocity.x );
            this.velocity.x = MomentumObject.MAX_SPEED * Math.cos( velAng );
            this.velocity.y = MomentumObject.MAX_SPEED * Math.sin( velAng );
         }
      
         this.lastFramePosition.x = this._x;
         this.lastFramePosition.y = this._y;
      }
      else {
         if ( Math.sqrt( this.velocity.x*this.velocity.x + this.velocity.y*this.velocity.y ) < MomentumObject.MIN_SPEED )
         {
            this.velocity.x = 0;
            this.velocity.y = 0;
         }

         this._x += this.velocity.x;
         this._y += this.velocity.y;
         
         this.velocity.x *= MomentumObject.DAMPING_FACTOR;
         this.velocity.y *= MomentumObject.DAMPING_FACTOR;
         
         if (MomentumObject.CONSTRAIN_TO_STAGE) {
            if (this._x > Stage.width) {
               this._x = Stage.width;
               this.velocity.x *= -1;
            }
            if (this._x < 0) {
               this._x = 0;
               this.velocity.x *= -1;
            }
            
            if (this._y > Stage.height) {
               this._y = Stage.height;
               this.velocity.y *= -1;
            }
            if (this._y < 0) {
               this._y = 0;
               this.velocity.y *= -1;
            }
            if (this._y < 40) {
               enterFrameGravity();
            }
         }
            // y= 40 o menos
      }
   }
   
        /*
   function enterFrameGravity ():Void {
      var fuerza = 1;7
      var velocidad2 = 0;
      
      if ( ball._y <= 40 ) {
         onEnterFrame = function() {
         velocidad2 += fuerza;
         ball._y += velocidad2;
            if (ball._y>450) {
               ball._y = 450;
               velocidad2 *= -0.4;
            }
         }
      }
   }
        */
   
   function pressHandler () : Void {
      this.startDrag();
      this.isDragging = true;
   }
   
   function releaseHandler () : Void {
      this.stopDrag();
      this.isDragging = false;
   }

Por Skuash

40 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina.

firefox

 

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