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 { } } } } }