hola
hice un mapa , utilice un sprite de una personaje para darle movimiento, el mapa lo hice mediante scroll porque es mas grande de lo normal
todo carga bien, el personaje tiene limites para evitar el scroll inifinito y que se detenga en ciertos lugares, pero tengo una duda
se me ocurrio solo hacer el campo donde caminara el personaje, y se me ocurrio poner despues algunas casas para usarlas como colision, pero en el momento de poner la casa se mueve junto con el personaje
alguien sabe que debo hacer para poner varias imagenes y que solo se mueva el personaje y que la casa que estoy colocando se quede estatica, porque tambien se me ocurrio poner personas que se movieran automaticamente, pero entre mas cosas ponga me imagino que todo se movera junto con el personaje
espero me puedan ayudar, porque no entiendo porque todo se mueve si no le he puesto movimiento a la imagen de la casa
salu2
Mmm...
"espero me puedan ayudar, porque no entiendo porque todo se mueve si no le he puesto movimiento a la imagen de la casa"
Sin código nosotros tampoco lo entenderemos :P
ammm, espero no se enojen por
ammm, espero no se enojen por mi codigo todo mal hecho, pero tengo todo revuelto porque estoy aprendiendo y meto de todo como vaya avanzando
espero sea entendible
<code>#include <oslib/oslib.h>
#include "heads/mapa_nive1.h"
#define ABAJO 0;
#define ARRIBA 15;
#define IZQUIERDA 30;
#define DERECHA 45;
PSP_MODULE_INFO("Mapa_nivelone", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER || THREAD_ATTR_VFPU);
struct{
OSL_IMAGE *ima;
}spriteperso;
struct{
OSL_IMAGE *house;
}spritehouse;
int spridireccion;
int velocidad = 1;
int spFrame;
OSL_IMAGE *maps;
OSL_MAP *niveluno;
void Declaracionsprite();
void Declaracioncasas();
void controles();
void animacion();
void animacion(){
spFrame++;
oslSetImageTileSize(spriteperso.ima,spridireccion ,(spFrame * 22), 15, 22);
if(spFrame == 5){
spFrame = 0;
}
}
void controles(){
oslReadKeys();
if(osl_keys->held.down){
if(niveluno->scrollY <= 1320){
niveluno->scrollY += velocidad;
}
if(niveluno->scrollY >= 1300 && spriteperso.ima->y <= 190){
spriteperso.ima->y += velocidad;
}
spridireccion = ABAJO;
animacion();
}
if(osl_keys->held.up){
//scrollY menor a 50 se detiene y si sprite es mayor a 20 continua
//recordar que el tamano depende del tamano puesto para no exceder la pantalla
//al inicio
if(niveluno->scrollY <= 50 && spriteperso.ima->y >= 20){
spriteperso.ima->y -= velocidad;
}
if(niveluno->scrollY >= 5){
niveluno->scrollY -= velocidad;
}
spridireccion = ARRIBA;
animacion();
}
if(osl_keys->held.right){
if(niveluno->scrollX <= 1100){
niveluno->scrollX += velocidad;
}
if(niveluno->scrollX <= 1100 && spriteperso.ima->x <= 400){
spriteperso.ima->x += velocidad;
}
if(!osl_keys->held.up && !osl_keys->held.down){
spridireccion = DERECHA;
animacion();
}
}
if(osl_keys->held.left){
if(niveluno->scrollX >= 5){
niveluno->scrollX -= velocidad;
}
if(niveluno->scrollX <= 15 && spriteperso.ima->x >= 80){
spriteperso.ima->x -= velocidad;
}
if(!osl_keys->held.up && !osl_keys->held.down){
spridireccion = IZQUIERDA;
animacion();
}
}
if(!osl_keys->held.value){
spFrame = 0;
oslSetImageTileSize(spriteperso.ima, spridireccion, 0, 15, 22);
}
}
void Declaracioncasas(){
oslSetTransparentColor(RGB(255, 0, 0));
spritehouse.house = oslLoadImageFilePNG("sprite/casa1.png", OSL_IN_RAM, OSL_PF_5551);
oslDisableTransparentColor();
if(!spritehouse.house){
oslDebug("No es posible cargar todas las imagenes requeridas");
}
}
void Declaracionsprite(){
oslSetTransparentColor(RGB(255,0,255));
spriteperso.ima = oslLoadImageFilePNG("sprite/sprite.png", OSL_IN_RAM, OSL_PF_5551);
oslDisableTransparentColor();
if(!spriteperso.ima){
oslDebug("No es posible cargar todas las imagenes requeridas");
}
spriteperso.ima->x = 432;
spriteperso.ima->y = 325;
spridireccion = ABAJO;
}
int main(){
oslInit(0);
oslInitGfx(OSL_PF_8888, 1);
maps = oslLoadImageFilePNG("mapas/mapa_nivel_gba.png", OSL_IN_RAM, OSL_PF_8888);
Declaracionsprite();
Declaracioncasas();
niveluno = oslCreateMap(maps, mapa_nivel1_map, 16, 16, 100, 100, OSL_MF_U16);
while(!osl_quit){
oslStartDrawing();
//limites del sprite en la pantalla
if(spriteperso.ima->x < 0)
spriteperso.ima->x = 0;
if(spriteperso.ima->y < 0)
spriteperso.ima->y = 0;
if(spriteperso.ima->x > 465)
spriteperso.ima->x = 465;
if(spriteperso.ima->y > 250)
spriteperso.ima->y = 250;
//
//Cargar las imagenes
oslDrawMapSimple(niveluno);
oslDrawImage(spriteperso.ima);
oslDrawImageXY(spritehouse.house, 100, 100);
//
//comenzar los controles
controles();
//
oslEndDrawing();
oslSyncFrame();
}
oslEndGfx();
oslQuit();
return 0;
}
</code>
hola acabo de seguir
hola
acabo de seguir intentando y vi que cuando el scroll se mueve. las imagenes toman el nuevo tamaño de (X,Y) de lo que seria la pantalla
y por esa razon se mueve la casa y no se queda estatica, entonces supongo que tengo 2 opciones
hacer el mapa con todo y objetos y buscar la manera de hacer colisiones dependiendo del tile que necesite... o
poner el mapa como imagen para no usar scroll
pero las dos tienen sus desventajas, que pues veo el mapa muy plano y queria darle un resalte con cosas encima
y la otra desventaja es que si uso un mapa que no use scroll, el sprite no podra moverse por mapas grandes, tendre que hacer varios mapas y que avance eliminando uno y poniendo el siguiente
tengo pensado hacer todo el mapa completo con algun editor pero con que detecto las cosas para hacer colision?, se hara con esto?... oslGetImagePixel y objPixelColor y de casualidad habra algun ejemplo para usarlo?
mi objetivo de poner imagenes por separado era que si por ejemplo, entrabas a una casa, se me hizo mas sencillo poner imagenes con transparencias iguales a las cosas como mesas, silllas, jarrones, etc, y asi hacer que el personaje no pudiera pasar sobre esas cosas con colisiones a todas las cosas que tuviean el color rosa
pero creo tendre que detectar los pixeles y decirle que alli no pase, encontre un ejemplo de poner imagenes en arrays, eso podria ayudarme?
pero la duda sobre entonces como poner mas imagenes con movimiento, como gente en el pueblo que camine de arriba a abajo o derecha a izquierda, se podra con oslib?
espero me puedan responder, investigo lo mas que puedo pero casi sobre oslib no encuentro
salu2
Mmm...
En realidad lo que pasa es que lo que quieres es que las casas se muevan con el mapa, ¿no? Resulta que las casas están estáticas en la pantalla (Siempre tienen el mismo valor x e y), mientras que por debajo estás moviendo el mapa, por lo que al final parece que las casas se mueven en cuanto cambias el mapa.
Para solucionarlo necesitarias o poner las casas en el mapa y guardarlo en una sola imagen, o que el programa también modifique las coordenadas de las casas a medida que muevas el mapa.
NekeOS, el nuevo shell para PSP
PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.
Sony Xperia Z1 Compact con Android 5.1.1
Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).