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());
}

hace 1 año 11 semanas
hace 1 año 19 semanas
hace 1 año 20 semanas
hace 1 año 20 semanas
hace 1 año 20 semanas
hace 1 año 20 semanas
hace 1 año 20 semanas
hace 1 año 20 semanas
hace 1 año 20 semanas
hace 1 año 20 semanas