Comunidad de diseño web y desarrollo en internet online

Colisiones en AS3

Citar            
MensajeEscrito el 26 May 2011 03:40 pm
Haber les comento mi problema:

La idea es con este proyecto es hacer una especie de RPG, cuando se oprimen las teclas para mover al personaje ↑↓→←, lo q se mueve es el escenario, el pesonaje siempre va a permanecer en el centro.

El problema surge en el momento que el personaje hace contacto (Colision) con un objeto del escenario, el personaje se detiene pero al soltar la tecla oprimida el personaje no se mueve mas.

Lo que he podido idenificar es que el personaje al hacer contacto, nunca sale de esa colisión por eso se queda ahi pegado.

Me urge solucionar este incoveniente, cualquier sugernecia será bienvenida, gracias de antemano

Código ActionScript :

package 
{
   /**
    * ...
    * @author Fidelacho
    */
   
   import flash.display.MovieClip;
   import flash.display.Stage;
   import flash.display.Loader;
   import flash.net.URLRequest;
   import flash.events.ProgressEvent;
   import flash.events.IOErrorEvent;
   import flash.events.Event;
   import flash.display.DisplayObject;
   import flash.ui.Keyboard;
   import flash.geom.Point;
   
   
   import fl.transitions.Tween
   import fl.transitions.easing.*
   
   import com.project.player.Player;
   import com.project.display.World;
   import com.Project.utils.KeyObject;
   
   import com.Project.hits.HitTest;
   import com.Project.PixelPerfectCollisionDetection;
      
   public class Engine extends MovieClip
   {
      private var _player:Player;
      private var _loaderWorld:Loader;            
      private var _world:MovieClip;
      private var _keysDown:Object;
      private var _speedPlayer:uint;      
            
      public function Engine() 
      {
         _mask = new MovieClip();                           
         _player = new Player();
         _loaderWorld = new Loader();    
         _speedPlayer = 20;
                        
         loadWorld();         
      }
      
      /* Función que carga la pelicula world.swf
       * que va  aser nuestro escenario
       * 
       **/
      
      private function loadWorld():void  
      {
         var url:URLRequest = new URLRequest("swf/world.swf"); 
         _loaderWorld.load(url);
         
         _loaderWorld.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressLoadWorld);
         _loaderWorld.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorLoadWorld);
         _loaderWorld.contentLoaderInfo.addEventListener(Event.COMPLETE, createWorld);               
      }
      
      /* Ubicar en el stage la pelicula world.swf
       * y colocar nuestro personaje
       * @param Event
       **/
      
      private function createWorld(event:Event):void
      {
         _world = new MovieClip();
         _world = _loaderWorld.content as MovieClip;
         
         _world.x = -stage.stageWidth / 2;               
         addChild(_world);
         
         _player.x = stage.stageWidth / 2;
         _player.y = stage.stageHeight / 2;
         _player.scaleY = _player.scaleX = .4;
         
         _player.addEventListener(Event.ENTER_FRAME, movePlayer);
      
         addChild(_player);               
      }   
      
      private function errorLoadWorld(event:IOErrorEvent):void
      {
         //trace("Error: " + event);
      }
      
      private function progressLoadWorld(event:ProgressEvent):void
      {
         //trace("Progress: " + event);      
      }
      
      /* Ubicar en el stage la pelicula world.swf
       * y colocar nuestro personaje
       * @param Event
       **/
         
      private function movePlayer(event:Event):void
      {
         var Varstatus:Boolean;   
         
         /*Asigno un valor booleano al return de la colision entre dos objetos,
         * con la  clase PixelPerfectCollisionDetection;
         * Source:http://troygilbert.com/2007/06/pixel-perfect-collision-detection-in-actionscript3/
         **/
         
            Varstatus = PixelPerfectCollisionDetection.isColliding(_player, _world.world.mcObject3, this, true, 1);   
         
         
         /*El objeto _player posee un método isDown que em devulve un booleano de la tecla oprimida
         **/
         
         if (_player.isDown(Keyboard.LEFT))
         {
            _player.gotoAndStop('goLeft');      
            
            //Si no existe la colisión cuando tengo la tecla izquierda oprimida
            //el escenario se desplaza hacia la derecha
            
            if (!Varstatus)            
            {
               _world.x += _speedPlayer;                              
               
            } 
            //Por el contrario si existe la colisión cuando tengo la tecla izquierda oprimida
            //el suelo deja de moverse
            else    
            {               
               
            }      
                        
         } 
         
         if (_player.isDown(Keyboard.RIGHT))
         {
            _player.gotoAndStop('goRight');   
                        
            if (!Varstatus)         
            {
               _world.x -= _speedPlayer;               
               
            } else
            {
            
            }
         }   
         
         if (_player.isDown(Keyboard.UP))
         {
            _player.gotoAndStop('goUp');      
            if (!Varstatus)         
            {
               _world.y += _speedPlayer;
            } else
            {
            
            }
            
            
         } else if (_player.isDown(Keyboard.DOWN))
         {
            _player.gotoAndStop('goDown');
            if (!Varstatus)         
            {
               _world.y -= _speedPlayer;
            } else
            {
            
            }            
         }   
         
      }   
   }   
}

Por Fidelacho

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2011 05:45 pm
Para que deje de detectar colisión, debes modificar un poco su posición al momento del contacto, lo suficiente como para que no quede dentro de la condición

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 May 2011 06:15 pm
Jorge muchas gracias, pero al hacer eso se crea un desplazamiento del escenario bastante brusco......y no siempre el personaje sale de la colisión

Por Fidelacho

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2011 09:12 pm
Lo tienes que mover apenas lo mínimo para que el hitTest no sea true, sino se queda pegada, es uno de los mas básicos y viejos trucos de los juegos ... ¿o quien no ha hecho la pelotita que se queda vibrando contra la pared?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 May 2011 09:49 pm
No se si entendi bien, pero debo recordarte q lo q se mueve es el escenario no el personaje....

Por Fidelacho

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2011 11:58 pm
es lo mismo solo que en ves de mover el pj por ej 1px mueves el esenario
algo como

Código ActionScript :

while(esenario.hitTestPoint(char.x,char.y+ptAlto,true))esenario.y ++

saludos Maxx

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 27 May 2011 11:39 pm
Amigos de cristalab la verdad no he podido solucionar mi problema, por eso me tomo el atrevimiento de subir el proyecto para el que quiera colaborarme tenga una dimensión mas clara de mi problema....

Espero la colaboracion de ustedes muchas gracias..........

adjunto el link: http://www.mediafire.com/?bv2gfp2211hhpwp

Espero me den luces para poder resolver mi problema

Por Fidelacho

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2011 12:29 am
Que abro para probar el juego?

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 28 May 2011 01:36 am
Descarga el archivo y en la carpeta fla, al archivo index.fla

Por Fidelacho

12 de clabLevel



 

chrome
Citar            
MensajeEscrito el 28 May 2011 02:39 am
si pero no me carga nada supone que tiene que cargar world y el player pero no carga tampoco tira ningun error

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 29 May 2011 05:07 pm
Hola no entiendo porque no te cargo, lo descargue y lo probe y a i si me funciono, en la carpeta bin/media/index.swf, correlo y ahi te debe servir........muchas gracias

Por Fidelacho

12 de clabLevel



 

safari
Citar            
MensajeEscrito el 30 May 2011 04:31 pm
a mi me queda la pantalla negra y no carga nada..
que player usas?

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 30 May 2011 04:44 pm
Uso Flash CS5 y lo compilo para flash player 10

Por Fidelacho

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Jun 2011 06:18 pm
Alguna ayuda en estos momentos.....???

Por Fidelacho

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Jun 2011 06:25 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jun 2011 07:15 pm
Gracias por la sugerencia muy valida, pero no entieno el codigo esta disponible para cualquier persona q quiera compartir su conocimiento.....

Por Fidelacho

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Jun 2011 07:17 pm
El tema es que quien pregunta se tome el trabajo de abstraer el problema, usualmente esa es la mitad de la solución. Por como presentan la pregunta ya me puedo dar cuenta de que base parten

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jun 2011 07:20 pm
De acuerdo, pero antes de lanzar esta clase de sugerencias en necesario entender el contexto del topico del foro, gracias igualmente....

Por Fidelacho

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Jun 2011 07:33 pm
Me esforzaré por entender el tópico, estoy seguro que en tu caso lo subiste para compartirlo y no porque es mas fácil que explicarlo, pero no es lo habitual ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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