Anuncios Google

como puedo usar varias imagenes y que no se muevan?

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


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

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

 

Imagen de NEKERAFA

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).

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.