Moviendo Personajes

Artículo | Programación con simpleJ | simpleJ | Principiante

Varias personas me han pedido que les ayude a ver por qué su programa que mueve unos personajes no funciona correctamente. Con esos programas me he dado cuenta que les está costando bastante trabajo encontrar una manera de organizar su programa para lograr hacer lo que quieren y acaban escribiendo un programa que es demasiado complejo (¡me cuesta bastante trabajo entender cómo lo están tratando de hacer!).

Aquí abajo está el fuente de un programa que permite mover simultáneamente dos personajes por la pantalla. Espero que les sirva como un ejemplo que puedan emplear al hacer sus propios programas.

Al ejecutar este programa pueden mover uno de los personajes con las flechas izquierda y derecha del teclado, mientras que para mover al otro personaje es emplean las teclas D y G.

Estas son las imágenes empleadas para los sprites en el ejemplo:



Y aquí está el link para descargar el archivo: sprites.smap.

Para entender cómo funciona el programa es importante notar que las imágenes para el primer personaje son las imágenes 0, 1, 2 y 3; las del segundo personaje son las 16, 17, 18, y 19. En cada grupo de imágenes, las dos primeras muestran al personaje viendo hacia la izquierda, mientras que las otras dos imágenes muestran al personaje viendo hacia la derecha.

Este es el fuente del programa:

final BOTON_IZQUIERDA = 4;
final BOTON_DERECHA = 8;

final PERSONAJES_Y = 192 - 16; // Hasta abajo de la pantalla

final IZQUIERDA = 0;
final DERECHA = 2;

final VELOCIDAD_X = 2;

final LIMITE_IZQUIERDO = 0;
final LIMITE_DERECHO = 256 - 16;

var personaje1 = {
    dir: IZQUIERDA,
    x: LIMITE_DERECHO,
    sprite: 0,
    baseImagenes: 0
};

var personaje2 = {
    dir: DERECHA,
    x: LIMITE_IZQUIERDO,
    sprite: 1,
    baseImagenes: 16
};

/* Lee definiciones de sprites creadas con
   el sprites editor */
var spritesData = readSpritesFile("sprites.smap");

/* Pon colores en el mapa de colores */
for (var i = 0; i < 15; i++)
  setSpriteColor(i, spritesData.colors[i].red,
                    spritesData.colors[i].green,
                    spritesData.colors[i].blue);

/* Graba nuevas definiciones de sprites de 16 por 16 */
for (var i = 0; i < 128; i++)
  setLargeSpritePixels(i, spritesData.largePixels[i]);

setBackground(0, 0, 0);


muevePersonaje(personaje, botones) {
  var moviendose = false;
  if (isButtonDown(botones, BOTON_IZQUIERDA)) {
    moviendose = true;
    personaje.dir = IZQUIERDA;
    personaje.x -= VELOCIDAD_X;
    if (personaje.x < LIMITE_IZQUIERDO)
      personaje.x = LIMITE_IZQUIERDO;
  }
  if (isButtonDown(botones, BOTON_DERECHA)) {
    moviendose = true;
    personaje.dir = DERECHA;
    personaje.x += VELOCIDAD_X;
    if (personaje.x > LIMITE_DERECHO)
      personaje.x = LIMITE_DERECHO;
  }
  var imagen = personaje.baseImagenes + personaje.dir;
  if (moviendose) {
    // Solo tomar en cuenta las posiciones posibles
    var pos = personaje.x / VELOCIDAD_X;
    // Si la posicion es impar entonces se muestra la otra imagen
    if (pos % 2 == 1)
      imagen++;
  }
  setLargeSpriteImage(personaje.sprite, imagen);
  putSpriteAt(personaje.sprite, personaje.x, PERSONAJES_Y);
}
  

vbi() {
  muevePersonaje(personaje1, readCtrlOne());
  muevePersonaje(personaje2, readCtrlTwo());
}

pregunta

¿estos tambien se pueden programar en visual basic o en c++? ya conozco un poco acerca de estos programas

Porque cada vez que se envia

Porque cada vez que se envia una imagen se protocolo de traferencia de recibir y enviar el archivo. Por ello, hacen sólo archivo grande con todos los iconos y con la hojas de estilo seleciona uno o otro.

----------
Sohbet

Sí se puede

Claro que es posible programar juegos con Visual Basic o C++. De hecho, casi todos los videojuegos profesionales están escritos en C o C++. Pero este sitio está únicamente enfocado a simpleJ y Java.

Como poner solidos a los personajes

Hola Mago quisiera saber como es que puedo hacer para poner solidos a los personajes ya que los personajes se traspasan y yo quiero hacer un juego de peleas y necesito que sean solidos los personajes

Detección de colisiones

La detección de colisiones es un de los puntos más importantes en la programación de videojuegos. Tal vez estos comentarios de ayuden a ver una manera de hacer lo que necesitas:

http://www.simplej.com/?q=node/54#comment-127

http://www.simplej.com/?q=node/21

gracias

Nico

gracias a tu ayuda pude elaborar mi pseudocodigo

como poner puntuacion

Nico

quisiera saber como hago para que mis jugadores al golpearse obetengan un puntage y pierdan vida

choque de personajes

Nico

del codigo anteriormente hecho, como hago para que ambos personajes se puedan chocar y no se traspasen

como haser un juego

quiero saber

Cómo hacer un juego...

Ya probaste leer los dos primeros capítulos del libro ¡Descubre cómo se hace un videojuego!?

Flechas en el Visual Basic

El ciberman
Tengo 11 años y quisiera saver como ago para asignar flechas o teclas a un boton (visivle = false) para que cada vez que se aprete esa tecla se aprete ese boton asi la accion de ese boton tambien se realiza (y mueve al personaje o lo hace diparar,etc.) porque en el Visual Basic tengo un juego 1000 puntos pero para mover al personaje hay que apretar los votones del costado( ojo,no se comfundan boton con teclas) ¿alguien me podria ayudar?

gracias

Por esta información y tus tutoriales que son muy completos.

Te deseo lo mejor.

---
show para eventos

Esta técnica se usa en la paginas web

Curiosa técnica que se usan en las paginas web grandes como yahoo dónde se usa para ahorrar ancho de banda. Porque cada vez que se envia una imagen se protocolo de traferencia de recibir y enviar el archivo. Por ello, hacen sólo archivo grande con todos los iconos y con la hojas de estilo seleciona uno o otro. Para que piense que viajas técnicas siempre pueden ser utilizadas.

Realizar test gratis

sta bn el codigo pero como

sta bn el codigo pero como haria para k cuando no presione ninguna tecla el de verde avanze solo?

bueno

es muy bueno, gracias

premier eye serum

temos

loo

como hago para colocar imagenes en un juego

estoy haciedo un juego de guerras y necesito poner de fondo un mapa pero que no desaparesca

EmiRC=!!!

yo tengo la solucion

a que te refieres con que desaparesca
|-------------------------------------------|
| G3RW4Nll-77NAMREG-GERMAN77 |
|-------------------------------------------|

que cuando uno mueve el

que cuando uno mueve el personaje el fondo no se borre

ok

mira si usas sprites no tendras problemas con eso pero puedes hacer que cada ves que se mueva primero dibuje el fondo y luego el personaje
|-------------------------------------------|
| G3RW4Nll-77NAMREG-GERMAN77 |
|-------------------------------------------|

aah

entiendo, y me siento un idiota por no darme cuenta, jaja, cuando termine de hacerle el menu a space cataclysm le pongo la imagen
EmiRC=!!!

Yo lo estaba haciendo de una

Yo lo estaba haciendo de una forma bastante más complicada que terminaba consumiento recursos a rolete. Esta opción parece ser la correcta. Cuando la pruebe les cuento. (soy novato en esto)

Saludos
magia

Tengo un problema

esto haciendo un juego en simplej, es la tercera parte de zombietown
un hombre con un arma tiene que matar mas zombie como pueda, se como hacerlo, como no estoy seguro si se pueden poner mas de dos fondos (no al mismo tiempo) lo pense de otra forma, hacer el fondo con sprites, el personaje no se mueve, lo que se muve es el fndo, este fondo son una calle con unos arboles, cuando la tecla flecha_derecha
esta presionada, los sprite de los arboles se mueven a la isquierda.
para hacer esto use muchos sprites, pero cuando los quiero poner en la pantalla solamente se me ponen los sprites del 0 al 10, si pongo 12 se me pone el sprite 2. ayudaa
EmiRC=!!!

la solucion esta en usar

la solucion esta en usar tiles no sprites porque tienes sprites limitados, tu puedes mover el fondo como en Rogue con 2 funciones para facilitartelo te pongo el codigo que mueve la pantalla

no creo que sea muy complicado de usar lo unico que nesesitas es un mapa de tiles y tener en cuenta que el mapa nesesita tener un minimo de 34 por 26 porque si no te marca errores

var y= 0; /// cuanto se mueva hacia arriba o hacia abajo
var X= 0; /// cuanto se mueva hacia la izquierda o derecha
var tiles= new array[100][100];///arrego que tiene los numeros de los tiles a poner
var xt = x / 8;
var xp = x % 8;
var yt = y / 8;
var yp = y % 8;
for (var r = 0; r < 25; r++)
arrayPoke(r * 64, tiles[yt + r], xt, 33); ////dibuja los tiles
setSmoothScroll(xp, yp); ///mueve cuadrito por cuadrito
|-------------------------------------------|
| G3RW4Nll-77NAMREG-GERMAN77 |
|-------------------------------------------|

MUCHISIMAS GRACIAS GERMAN!!!!

EmiRC=!!!

no hay problema

yo aqui estoy para ayudarte
|-------------------------------------------|
| G3RW4Nll-77NAMREG-GERMAN77 |
|-------------------------------------------|

aun con dudas =s

perdon german77
entonces en si el escenario no se mueve, lo q se mueve es la pantalla??
eso lo medio entendi, pero entonces, cuando se mueve la pantalla te esta mostrando un mismo escenario?? o son varios escenarios unidos o como??
esq ahi es donde no entiendo, si es un mismo escenario como se le hace para seguir dibujando en tileseditor??
ayuda porfavor =S

mira

muestra solo un esenario, pero el esenario esta formado por muchos tmap
|-------------------------------------------|
| G3RW4Nll-77NAMREG-GERMAN77 |
|-------------------------------------------|