Ayuda para controlar una imagen

Como haces unos días había liberado mi 1er hombrew  Multi Emulators v2.0 (con ayuda de algunos coders y estos están en los créditos XD).

Pues he iniciado con otro proyecto le aseguro que sera muy bueno, pero me ha presentado un problema y es que no se como hacerlo y espero que me den una ayudita.

El punto es que quisiera mover una imagen (pelota) desde un punto a otro, es como que desaparezca en el punto de origen y aparezca en otro, o sea si la imagen esta en  esta ubicacion (150, 38) y al presional el control hacia abajo se quite de esa ubicacion y aparezca en otra (250, 38), pero al soltar el pad abajo se quede en la ultima ubicacion (250, 38).

No se si me di entender...

 

Edito: Es en lua la ayuda....

 


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.
Imagen de Chimecho

Pues...

En lugar de coordenadas, debes usar variables para ellas, me explico:

 

imagen = Image.load(ruta_de_la_imagen)
oldpad = Controls.read()
 
x = 150 -- x inicial
y = 38 -- y inicial
 
while true do
	screen:clear()
	pad = Controls.read()
 
	if pad:down() and not oldpad:down() then
		x = 150 -- nueva coordenada en x, aunque es igual que la anterior...
		y = 100 -- nueva coordenada en y
	end
 
	screen:blit(x, y, imagen)
 
	screen.flip()
	screen.waitVblankStart()
	oldpad=pad
end

Con eso al presionar abajo, la imagen se "teletransportará" xD

Pero al soltarlo o presionarlo varias veces más, no pasará nada...

Un saludo!



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

He probado

He probado de la forma que explica y funciona muy bien, pero todavia hay un pequeño problema, tratare de explicarlo lo mejor que pueda.

La letras que estan mas debajo seria una casilla (cada casilla tiene su coordenada X,Y), lo cual en general seria como el del tablero del ajedrez.

     A     B     C     D     E

     F     G     H     I      J

     K     L     M     N     O

     P     Q    R     S      T

     U     V    W     X      Z

En la coordenada (A) seria el punto de inicio de la imagen.

Estando la imagen en esa letra (A), al presionar el pad hacia abajo dicha imagen se teletransportará hacia (U), luego de estar en (U), al presionar hacia arriba teletransportará hacia (A). Hasta aqui esta todo claro de la forma que explica.

Pero al estar la imagen ubicada en (U), presione hacia la derecha se teletransporte hacia (W) y cuando la imagen este en (A) y presione hacia la derecha se teletransporte hacia (D), etc..

Como lo podrias hacerlo ?

Saludo!!!!

Imagen de moikop

Array + coordenadas

Yo pondría todas las coordenadas en un array:

coordenadas = {
a = { x = 0, y = 0 },
b = { x = 10, y = 0 },
-- Y asi hasta tener todas...
}

Luego, creas una variable (Puede ser numerica o string. Pero y usaría numerica). Y si se presiona x boton, restas o sumas para que quede en la letra que quieres. por ejemplo:

-- enumeras las letras. la a es 0, b es 1 y asi...
if pad:right() and not oldpad:right() then
pos = pos + X -- X es el numero que le debes sumar a pos para que llegue al numero de la posición en la que quieres que este. O directamente puedes decirle que si pos == Y, pase a ser Z...

Después pones si pos == XNumero, que blitee la imaen en coordenadas.a.x  coordenadas.a.y

Traté de explicarlo lo más fácil que pude, cualquier cosa me dices :P


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.

No preguntes por MP, mejor pregunta aquí.

Honestamente

Honestamente no he entendido bien.

Pondre una imagen y alguna aclaraciones, para dar mayor entendimiento al asunto.

 

                              

El tablero seria el fondo, la esfera roja es la que controlaremos,
ademas donde esta ubicado la esfera es el punto de inicio, osea en
(150, 38). Cada cuadro tiene (50, 50), es acerca de (X, Y)

Explicare un poco la funcion de controlar la esfera roja:

Si la esfera esta en A1 (punto de inicio) y presiono hacia abajo se movera hacia E1 y estando en E1 y presiono hacia arriba se movera hacia A1, ademas estando la esfera en E1 y presiono hacia la derecha se movera hasta E3 y estando en E3 y presiono hacia la izquierda se movera hacia E1.

Estando en A1 y presione hacia la derecha, la esfera se movera hacia A3 y si estando en A3 y presione hacia la izquierda se mueva hacia A1, al igual que estando en A3 y presione hacia abajo se mueva hasta C3, etc..

Aqui es el problema y es que tengo dos ubicacion diferente que funciona con la misma direccion del pads. derecha - izquierda y abajo - arriba.

Espero haber dado a entender.

Saludo!!!

 

 


 

Si lees bien sacas el codigo,

Si lees bien sacas el codigo, primero te dijeron que uses arrays para determinar las coordenadas de cada cuadrado para asi comparar y blitear la bolita donde la quieres, segundo lo que has escrito es un pseudocodigo que si lees bien con if then else end entiendo que lo puedes resolver facilmente. Mas de lo que te han dicho especialmente Moikop y Chimecho, seria crearte el codigo.

Aun no, he podido..

Aun no he podido solucionar el problema. XD....
Aqui esta el codigo que estaba haciendo...

----Level 1----
 
---Movimiento de la esfera--
 
imagen = Image.load("ms0:/PSP/GAME/Prueba/Imagenes/esfera.png")
 
oldpad = Controls.read()
 
x = 154 -- x inicial
y = 38 -- y inicial
 
while true do
	screen:clear()
	pad = Controls.read()
	screen:blit(115,0, mapa)
 
	if pad:down() and not oldpad:down() then
	x = 154 -- nueva coordenada en x, aunque es igual que la anterior...
	y = 196 -- nueva coordenada en y
	end
 
    	if pad:up() and not oldpad:up() then
        x = 154
	y = 38
	end
 
	if pad:right() and not oldpad:right() then
	x = 237
	y = 38
	end
 
	if pad:left() and not oldpad:right () then
	x = 154
	y = 38
	end
 
	screen:blit(x, y, imagen)
 
	screen.flip()
	screen.waitVblankStart()
	oldpad=pad
end

Como se daran cuenta, cuando la esfera esta en (237,38) y presiono hacia arriba,
pues se mueve hacia (154,38), lo cual al presinarlo hacia arriba no se deberia
mover en este caso.

Ademas estando en (237,38) y presiono hacia abajo, se mueve hacia (154,196),
lo cual en mi caso solo se deberia mover hacia (237,146).

Estando en (154,196) y presiono hacia la derecha, pues se mueve hacia (237,38),
lo cual en este caso solo se debera mover hasta (237,196).

Estando en (154,196) y presiono hacia la izquierda, pues se mueve hacia (154,38),
lo cual en este caso no se deberia mover.

Espero haberme dado a entender....

Saludo!!!

Imagen de -chus-

La razon

Si se mueve donde tu dices qye no deberia es por que asi lo has asignado, cada vez que presiones un boton la variable de las cordenadas que asignaste se la imagen se movera ahi, fijate lo que has puesto... creo que seria mas facil con tablas y aunmentando las cordenadas de X & Y por los que se necesite y colocar una variable con oldx & oldy para que te respete la ultima cordenada, es solo una idea, espero y te sirva, si no un tiempo mas que tenga te hago el codigo XD saludos



                                          Mis Homebrew´s

 http://psp.scenebeta.com/noticia/memorama-games#comment-803033


Aun no..

Aun  no entiendo.. XD

Y hacerlo como colisiones, funcionaria ?

Como se podrias hacer ?

 

Saludo!!

Imagen de moikop

Puedes usar una variable pra

Puedes usar una variable pra saber en que casilla esta y como debe reaccionar...

Imagen de unai.

Bueno, como Jesus te ha

Bueno, como Jesus te ha respondido en C, yo te respondo en Lua:

imagen = Image.load("ms0:/...")
 
oldpad = Controls.read()
while true do
pad = Controls.read()
 
screen:clear()
 
if pad:down() and not oldpad:down() then
imagenY=imagenY+100 --Lo que hace es mover la imagen cien pixeles mas abajo. Lo he hecho asi porque has puesto una diferencia de 100 en tu ejemplo.
elseif pad:up() and not oldpad:up() then
imagenY=imagenY-100
end
 
screen:blit(38, imagenY, imagen)
 
screen.flip()
screen.waitVblankStart()
oldpad=pad
end



Offspring - Rise and Fall, Rage and Grace
Dark_AleX
21st Century Breakdown
American Idiot

SceneBET y PSP Euskaraz 2... ¿Pronto?

ok

Da un error en:

SCRIPT.LUA:24 bad argument #1 to ´blit´ (number expected, got nil).

Y en la linea 24 tengo:

screen:blit(38, imagenY, imagen)

 

Saludo!!!

Imagen de unai.

Eso debe ser que aun no le

Eso debe ser que aun no le has asignado ningun valor a la variable imagenY. O sea, que no has escrito imagenY=100 (Por ejemplo).

No entiendo

No entiendo la repuesta.

Podria explicarla con el codigo. :(

Imagen de unai.

Lo que te dice el error es

Lo que te dice el error es que has usado una variable nula, que es eso, es una variable a la que no le has dado ningun valor o le has dado nil. El nil no es tu caso.
Ahora con codigo:
while true do
screen:blit(38,imagenY,imagen)
end
En este caso te da error porque la variable imagenY no equivale a un numero, es nulo.
imagenY=100
while true do
screen:blit(38, imagenY,imagen)
end
En este caso no habría problema, ya que imagenY equivale a un número. Claro, no te olvides del correspondiente screen.flip().



Offspring - Rise and Fall, Rage and Grace
Dark_AleX
21st Century Breakdown
American Idiot

SceneBET y PSP Euskaraz 2... ¿Pronto?

Imagen de xenneco

Umm

Um no se si te he entido bien , a lo de cambiarlo de imagen no se como se hace , pero a lo ultimo (si te he entendido claro) creo que si.

Lo que quieres , es que cuando tengas pulsado el boton (ej:Arriba) no te se siga cambiando ¿no? , si es así , pues en los controles pon:

 

while (1)
    {
       SceCtrlData currentPad, lastPad;
       sceCtrlReadBufferPositive(&currentPad, 1);
       
       if( currentPad.Buttons != lastPad.Buttons )
       {
          lastPad = currentPad;  //Esto hace que las pulsaciones se registren una sola vez//

          if(currentPad.Buttons & PSP_CTRL_CROSS)   //Al pulsar X... //
          {       

 

[NO SE SI SERA ESO A LO QUE TE REFIERES...]


:)

Explico mas

Explicare mas claro.

Por ej:

Tengo una imagen de tamaño 30 x 30 y ubicada en (155,38) por defecto aparecere en ese lugar, pero cuando presiono el pad para que se ubique a (155, 70) y este ahi hasta que presione otra direccion del pad.

Es como si controlara la imagen....

 

Saludo!

 

 

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.