|
21
|
Media / Juegos y Consolas / juego flash 2D
|
en: 11 Diciembre 2011, 21:08 pm
|
Saludos a todos, estoy haciendo un juego en flash i con el personaje ya echo y sus movimientos, quiero que no pueda andar cuando se encuentra con una pared. Por eso he echo una matriz que sera mi mapa myMap = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]; Entonces si por ejemplo ando hacia la derecha: else if(estat == RIGHT){ if(Key.isDown(Key.UP)){ gotoAndPlay("UP") estat = UP } else if(Key.isDown(Key.LEFT)){ gotoAndPlay("LEFT") estat = LEFT } else if(Key.isDown(Key.DOWN)){ gotoAndPlay("DOWN") estat = DOWN } else if(Key.isDown(Key.RIGHT)){ x=this._x/30 y=this._y/30 trace(x) if((myMap[x+1][y])==0){ this._x += speed }else if((myMap[x+1][y])!=0){ } if(Key.isDown(Key.UP)){ gotoAndPlay("D_UPRIGHT") estat = D_UPRIGHT } else if(Key.isDown(Key.DOWN)){ gotoAndPlay("D_DOWNRIGHT") estat = D_DOWNRIGHT } else if(Key.isDown(Key.SPACE)){ _root.attack1r.duplicateMovieClip("attack1r"+depth_laser,depth_laser) _root["attack1r"+depth_laser]._x = this._x + 100 _root["attack1r"+depth_laser]._y = this._y depth_laser++ } } else{ gotoAndPlay("RRIGHT") estat = RRIGHT } }
Cuando ando hacia la derecha, consulto a la matriz la posicion en que estoy y miro si en x+1 tenemos un 1 o un 0 para movernos o no. La cuestion es que no se me mueve hacia la derecha. Que hago mal? gracias
|
|
|
22
|
Media / Juegos y Consolas / codigo mlvimiento personaje flash (rpg)
|
en: 18 Noviembre 2011, 16:09 pm
|
lo puse en programacion en general, pero creo que es mas adecuado aqui, lo siento por el doble post.
Saludos a todos, En la universidad estoy haciendo un videojuego con flash, y estoy empezando a hacer el codigo para el movimiento de un personaje en camara isometrica y el fondo hecho con tiles. La cuestión es que para hacer el movimiento, tengo que hacer como "maquina de estados" para cada estado definir sus posibles movimientos, y este codigo puede ser muy largo. He buscado por la web, y hay ya codigos echos, pero no me acaban de gustar (muchos if, o echos con booleans, prefiero switch, case, break). Alguien de vosotros tiene o ha elaborado un codigo para esta funcion de mover un personaje? PD: videojuego RPG, tipo zelda o boxhead. Gracias a todos, pajaras
Código: package { import flash.display.MovieClip; import flash.events.KeyboardEvent; // Clase que permite detectar cuando una tecla se pulsa import flash.ui.Keyboard; // Clase que se necesita para reconocer las teclas pulsadas import flash.events.TimerEvent; // Clase que perminte crear temporizadores import flash.utils.Timer;
public class JuanitaCaminando extends MovieClip // Esta es la clase del juego { // 4 Boleanos que permiten saber cuales flechas estan pulsadas // Cuando de pulsa se pone en true y cuando se suelta en false private var pulsadoLeft :Boolean = false; private var pulsadoRight :Boolean = false; private var pulsadoDown :Boolean = false; private var pulsadoUp :Boolean = false; // 2 Boleanos que indican el que estado esta juanita private var caminando :Boolean = false; private var parada :Boolean = true;
// Numero que indica hacia donde esta mirando juanita. // Se utiliza para el movimiento y para la postura. // Esta basado en las agujas de reloj. // EJEM: Cuando direccion es 300 (osea 3:00), juanita se mueve a la derecha // Cuando direccion es 130 (osea 1:30), juanita se mueve a la diagonal derecha private var direccion :uint; private var velocidad :uint = 4; // pixeles que se desplaza juanita // Hay dos Timer para que el movimiento sea mas fluido... // y para que el personaje se quede parada viendo en diagonal. private var tiempoParaGirar :Timer = new Timer(50, 0); private var tiempoParaMover :Timer = new Timer(20, 0); public function JuanitaCaminando() { // listener que aviza cuando se pulsa una tecla stage.addEventListener(KeyboardEvent.KEY_DOWN, pulsarTecla); // listener que aviza cuando se suelta una tecla stage.addEventListener(KeyboardEvent.KEY_UP, soltarTecla); tiempoParaGirar.addEventListener(TimerEvent.TIMER, giraJuanita); // activando temporizador que actualiza la postura de juanita. // Ejecuta la funcion giraJuanita que esta mas abajo tiempoParaGirar.start(); tiempoParaMover.addEventListener(TimerEvent.TIMER, moverJuanita); } // Funcion que se ejecuta cuando se pulsa una tecla private function pulsarTecla(e:KeyboardEvent):void { // Segun la tecla que se pulse se activan los boleanos. // investigar sobre switch en la ayuda de flash switch(e.keyCode) { case Keyboard.LEFT: pulsadoLeft = true; break; case Keyboard.RIGHT: pulsadoRight = true; break; case Keyboard.UP: pulsadoUp = true; break; case Keyboard.DOWN: pulsadoDown = true; break; default: break; } // Condicional que activa el temporizador que actualiza el movimiento de juanita if (caminando == false) { tiempoParaMover.start(); // Se ejecuta moverJuanita(); } // Esto hace que solo se active cuando se pulsa la tecla. // y no siempre que este presionada caminando = true; } private function soltarTecla(e:KeyboardEvent):void { // lo mismo que la funcion pulsarTecla pero al revez switch(e.keyCode) { case Keyboard.LEFT: pulsadoLeft = false; break; case Keyboard.RIGHT: pulsadoRight = false; break; case Keyboard.UP: pulsadoUp = false; break; case Keyboard.DOWN: pulsadoDown = false; break; default: break; } // Condicional que desactiva el temporizador, cuando todas... // .. las teclas estan sueltas if (pulsadoLeft == false && pulsadoRight == false && pulsadoUp == false && pulsadoDown == false ) { caminando = false; tiempoParaMover.stop(); // No se ejecuta moverJuanita(); } } // Funcion que controla la postura de juanita. private function giraJuanita(e:TimerEvent):void { if (caminando == true) { // Caminado 12:00 // Dependiendo de las teclas pulsadas,.. // y si no ha sido antes verdadero este condicional... // el MC llamado juanita va a un fotograma llamado caminando1200 // que corresponde a la postura correspondiente if (pulsadoLeft == false && pulsadoRight == false && pulsadoUp == true && pulsadoDown == false && direccion != 1200) { juanita.gotoAndStop("caminando1200"); direccion = 1200; // Esto hace que solo se ejecute una vez } // Caminado 1:30 if (pulsadoLeft == false && pulsadoRight == true && pulsadoUp == true && pulsadoDown == false && direccion != 130) { juanita.gotoAndStop("caminando130"); direccion = 130; } // Caminado 3:00 if (pulsadoLeft == false && pulsadoRight == true && pulsadoUp == false && pulsadoDown == false && direccion != 300) { juanita.gotoAndStop("caminando300"); direccion = 300; } // Caminado 4:30 if (pulsadoLeft == false && pulsadoRight == true && pulsadoUp == false && pulsadoDown == true && direccion != 430) { juanita.gotoAndStop("caminando430"); direccion = 430; } // Caminado 6:00 if (pulsadoLeft == false && pulsadoRight == false && pulsadoUp == false && pulsadoDown == true && direccion != 600) { juanita.gotoAndStop("caminando600"); direccion = 600; } // Caminado 7:30 if (pulsadoLeft == true && pulsadoRight == false && pulsadoUp == false && pulsadoDown == true && direccion != 730) { juanita.gotoAndStop("caminando730"); direccion = 730; } // Caminado 9:00 if (pulsadoLeft == true && pulsadoRight == false && pulsadoUp == false && pulsadoDown == false && direccion != 900) { juanita.gotoAndStop("caminando900"); direccion = 900; } // Caminado 10:30 if (pulsadoLeft == true && pulsadoRight == false && pulsadoUp == true && pulsadoDown == false && direccion != 1030) { juanita.gotoAndStop("caminando1030"); direccion = 1030; } parada = false; } // Este else hace que cuando se detenga juanita, quede en la postura adecuada else if(parada == false) { parada = true; switch(direccion) { case 1200: juanita.gotoAndStop("parada1200"); break; case 130: juanita.gotoAndStop("parada130"); break; case 300: juanita.gotoAndStop("parada300"); break; case 430: juanita.gotoAndStop("parada430"); break; case 600: juanita.gotoAndStop("parada600"); break; case 730: juanita.gotoAndStop("parada730"); break; case 900: juanita.gotoAndStop("parada900"); break; case 1030: juanita.gotoAndStop("parada1030"); break; default: break; } direccion = 0; // Para que no patine, si se oprime rapido la tecla. } } private function moverJuanita(e:TimerEvent):void { // Dependiendo de la postura, camina hacia una direccion o otra. // Esta es la mejor opcion cuando se trabaja con colicoines. switch(direccion) { case 1200: juanita.y -= velocidad; break; case 130: // Lo de velocidad-1 es para que no vaya mas... // ... rapido en diagonal que hacia los lados juanita.x += velocidad-1; juanita.y -= velocidad-1; break; case 300: juanita.x += velocidad; break; case 430: juanita.x += velocidad-1; juanita.y += velocidad-1; break; case 600: juanita.y += velocidad; break; case 730: juanita.x -= velocidad-1; juanita.y += velocidad-1; break; case 900: juanita.x -= velocidad; break; case 1030: juanita.x -= velocidad-1; juanita.y -= velocidad-1; break; default: break; } } } } codigo encontrado en la web, como ejemplo
|
|
|
24
|
Programación / Programación General / codigo movimiento personaje rpg flash
|
en: 17 Noviembre 2011, 01:43 am
|
Saludos a todos, En la universidad estoy haciendo un videojuego con flash, y estoy empezando a hacer el codigo para el movimiento de un personaje en camara isometrica y el fondo hecho con tiles. La cuestión es que para hacer el movimiento, tengo que hacer como "maquina de estados" para cada estado definir sus posibles movimientos, y este codigo puede ser muy largo. He buscado por la web, y hay ya codigos echos, pero no me acaban de gustar (muchos if, o echos con booleans, prefiero switch, case, break). Alguien de vosotros tiene o ha elaborado un codigo para esta funcion de mover un personaje? PD: videojuego RPG, tipo zelda o boxhead. Gracias a todos, pajaras package { import flash.display.MovieClip; import flash.events.KeyboardEvent; // Clase que permite detectar cuando una tecla se pulsa import flash.ui.Keyboard; // Clase que se necesita para reconocer las teclas pulsadas import flash.events.TimerEvent; // Clase que perminte crear temporizadores import flash.utils.Timer;
public class JuanitaCaminando extends MovieClip // Esta es la clase del juego { // 4 Boleanos que permiten saber cuales flechas estan pulsadas // Cuando de pulsa se pone en true y cuando se suelta en false private var pulsadoLeft :Boolean = false; private var pulsadoRight :Boolean = false; private var pulsadoDown :Boolean = false; private var pulsadoUp :Boolean = false; // 2 Boleanos que indican el que estado esta juanita private var caminando :Boolean = false; private var parada :Boolean = true;
// Numero que indica hacia donde esta mirando juanita. // Se utiliza para el movimiento y para la postura. // Esta basado en las agujas de reloj. // EJEM: Cuando direccion es 300 (osea 3:00), juanita se mueve a la derecha // Cuando direccion es 130 (osea 1:30), juanita se mueve a la diagonal derecha private var direccion :uint; private var velocidad :uint = 4; // pixeles que se desplaza juanita // Hay dos Timer para que el movimiento sea mas fluido... // y para que el personaje se quede parada viendo en diagonal. private var tiempoParaGirar :Timer = new Timer(50, 0); private var tiempoParaMover :Timer = new Timer(20, 0); public function JuanitaCaminando() { // listener que aviza cuando se pulsa una tecla stage.addEventListener(KeyboardEvent.KEY_DOWN, pulsarTecla); // listener que aviza cuando se suelta una tecla stage.addEventListener(KeyboardEvent.KEY_UP, soltarTecla); tiempoParaGirar.addEventListener(TimerEvent.TIMER, giraJuanita); // activando temporizador que actualiza la postura de juanita. // Ejecuta la funcion giraJuanita que esta mas abajo tiempoParaGirar.start(); tiempoParaMover.addEventListener(TimerEvent.TIMER, moverJuanita); } // Funcion que se ejecuta cuando se pulsa una tecla private function pulsarTecla(e:KeyboardEvent):void { // Segun la tecla que se pulse se activan los boleanos. // investigar sobre switch en la ayuda de flash switch(e.keyCode) { case Keyboard.LEFT: pulsadoLeft = true; break; case Keyboard.RIGHT: pulsadoRight = true; break; case Keyboard.UP: pulsadoUp = true; break; case Keyboard.DOWN: pulsadoDown = true; break; default: break; } // Condicional que activa el temporizador que actualiza el movimiento de juanita if (caminando == false) { tiempoParaMover.start(); // Se ejecuta moverJuanita(); } // Esto hace que solo se active cuando se pulsa la tecla. // y no siempre que este presionada caminando = true; } private function soltarTecla(e:KeyboardEvent):void { // lo mismo que la funcion pulsarTecla pero al revez switch(e.keyCode) { case Keyboard.LEFT: pulsadoLeft = false; break; case Keyboard.RIGHT: pulsadoRight = false; break; case Keyboard.UP: pulsadoUp = false; break; case Keyboard.DOWN: pulsadoDown = false; break; default: break; } // Condicional que desactiva el temporizador, cuando todas... // .. las teclas estan sueltas if (pulsadoLeft == false && pulsadoRight == false && pulsadoUp == false && pulsadoDown == false ) { caminando = false; tiempoParaMover.stop(); // No se ejecuta moverJuanita(); } } // Funcion que controla la postura de juanita. private function giraJuanita(e:TimerEvent):void { if (caminando == true) { // Caminado 12:00 // Dependiendo de las teclas pulsadas,.. // y si no ha sido antes verdadero este condicional... // el MC llamado juanita va a un fotograma llamado caminando1200 // que corresponde a la postura correspondiente if (pulsadoLeft == false && pulsadoRight == false && pulsadoUp == true && pulsadoDown == false && direccion != 1200) { juanita.gotoAndStop("caminando1200"); direccion = 1200; // Esto hace que solo se ejecute una vez } // Caminado 1:30 if (pulsadoLeft == false && pulsadoRight == true && pulsadoUp == true && pulsadoDown == false && direccion != 130) { juanita.gotoAndStop("caminando130"); direccion = 130; } // Caminado 3:00 if (pulsadoLeft == false && pulsadoRight == true && pulsadoUp == false && pulsadoDown == false && direccion != 300) { juanita.gotoAndStop("caminando300"); direccion = 300; } // Caminado 4:30 if (pulsadoLeft == false && pulsadoRight == true && pulsadoUp == false && pulsadoDown == true && direccion != 430) { juanita.gotoAndStop("caminando430"); direccion = 430; } // Caminado 6:00 if (pulsadoLeft == false && pulsadoRight == false && pulsadoUp == false && pulsadoDown == true && direccion != 600) { juanita.gotoAndStop("caminando600"); direccion = 600; } // Caminado 7:30 if (pulsadoLeft == true && pulsadoRight == false && pulsadoUp == false && pulsadoDown == true && direccion != 730) { juanita.gotoAndStop("caminando730"); direccion = 730; } // Caminado 9:00 if (pulsadoLeft == true && pulsadoRight == false && pulsadoUp == false && pulsadoDown == false && direccion != 900) { juanita.gotoAndStop("caminando900"); direccion = 900; } // Caminado 10:30 if (pulsadoLeft == true && pulsadoRight == false && pulsadoUp == true && pulsadoDown == false && direccion != 1030) { juanita.gotoAndStop("caminando1030"); direccion = 1030; } parada = false; } // Este else hace que cuando se detenga juanita, quede en la postura adecuada else if(parada == false) { parada = true; switch(direccion) { case 1200: juanita.gotoAndStop("parada1200"); break; case 130: juanita.gotoAndStop("parada130"); break; case 300: juanita.gotoAndStop("parada300"); break; case 430: juanita.gotoAndStop("parada430"); break; case 600: juanita.gotoAndStop("parada600"); break; case 730: juanita.gotoAndStop("parada730"); break; case 900: juanita.gotoAndStop("parada900"); break; case 1030: juanita.gotoAndStop("parada1030"); break; default: break; } direccion = 0; // Para que no patine, si se oprime rapido la tecla. } } private function moverJuanita(e:TimerEvent):void { // Dependiendo de la postura, camina hacia una direccion o otra. // Esta es la mejor opcion cuando se trabaja con colicoines. switch(direccion) { case 1200: juanita.y -= velocidad; break; case 130: // Lo de velocidad-1 es para que no vaya mas... // ... rapido en diagonal que hacia los lados juanita.x += velocidad-1; juanita.y -= velocidad-1; break; case 300: juanita.x += velocidad; break; case 430: juanita.x += velocidad-1; juanita.y += velocidad-1; break; case 600: juanita.y += velocidad; break; case 730: juanita.x -= velocidad-1; juanita.y += velocidad-1; break; case 900: juanita.x -= velocidad; break; case 1030: juanita.x -= velocidad-1; juanita.y -= velocidad-1; break; default: break; } } } } codigo encontrado en la web, como ejemplo
|
|
|
28
|
Programación / Desarrollo Web / Re: Como cortar una imagen en distintos trozos
|
en: 10 Septiembre 2011, 01:02 am
|
drvy muchas gracias, justo era eso lo que necesitaba. Mira que llevo tiempo con el photoahop y simpre me habia preguntado que era esta herramienta, graciad. PD: lo de exoprtarlo .html es genial, yo pensaba que me Tendria que romper la cabeza para hacer cuadrar todo....
|
|
|
|
|
|
|