Anuncios Google

Hacer una pelota que la puedas mover. [LuaDev]

Hola a todos.

Quisiera saber como hago un objeto que lo puedas mover. Como un pong que le peges y se mueva xD

Saludos y espero que me puedan ayudar ;)


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.

Muchas gracias a todos =) Ya

Muchas gracias a todos =)

Ya he aprendido algo nuevo hoy.

Saludos y GRACIAS!!

Imagen de markef

Imaginemos

Imaginemos que has creado una imagen de una pelota con las dimensiones 40x40:

--Cargas la imagen de tu supuesta pelota, hipotéticamente de 40x40
pelota = image.load("pelota.png");
 
-- Valores del eje de coordenadas
eje_x = 0;
eje_y = 0;
 
-- Iniciamos bucle
while (1) do
 
controls.read(); -- Lectura de controles
 
-- Controles
 
if controls.up() then eje_y = eje_y - 1 elseif controls.down() then eje_y = eje_y + 1 end;
if controls.left() then eje_x = eje_x - 1 elseif controls.right() then eje_x = eje_x + 1 end;
 
controls.analogtodigital(127); -- También podemos moverlo con el analógico
 
-- Límites teniendo en cuenta las proporciones de la pelota
if eje_x >= 480 - 40 then eje_x = 480 - 40 elseif eje_x <= 0 then eje_x = 0 end;
if eje_y >= 272 - 40 then eje_y = 272 - 40 elseif eje_y <= 0 then eje_y = 0 end;
 
-- Hay que tener en cuenta que cuando una imagen se encuentra en las coordenadas 0, se blitea bien la imagen, en cambio si indicamos el fin de esa pantalla hemos de restarle la proporción correspondiente de la pelota para que encaje en pantalla.
 
-- Bliteamos la pelota con los ejes
pelota:blit(eje_x, eje_y);
 
screen.flip(); -- Flip de pantalla para mostrarlo todo
end; -- Finaliza el bucle

Espero que te sirva ;)


Dicen que soy programador... Eso dicen.

Imagen de Tutos14

Precisamente hoy he estado

Precisamente hoy he estado trabajando es eso xD

Aqui va:

--Cargamos la imagen
 
pelota = image.load("Imagenes/pelota.png") 
 
--Designamos unas variables
 
x = 170  
y = 170
 
while true do 
 
 
controls.read()
 
--Movimiento del objeto
 
if controls.down() then x = x + 1 
end
 
if controls.up() then x = x - 1
end
 
if controls.left() then y = y + 1
end
 
if controls.rigth() then y = y - 1
end
 
--Limite en pantalla
 
 if x <= 0 then .x = 0 end  
if x >= 470 then .x = 470 end
if y <= 0 then .y = 0 end
if y >= 260 then y = 260 end
 
 
pelota:blit(y,x) --Bilteas la imagen
 
screen.flip() --Flip
end --Fin

Si no entiendes algo me avisas ;)



Imagen de markef

Este

Este código esta mal ¿El punto de las coordenadas en los límites a que viene? Y en el blit no entiendo porque asignarle una coordenada y a la x y viceversa.


Dicen que soy programador... Eso dicen.

Imagen de Tutos14

Lo que ha pedido es poder

Lo que ha pedido es poder mover por pantalla la pelota pues hay lo tiene, no se cual es tu inconveniente.

Si lo quieres sin limite:

--Cargamos la imagen
 
pelota = image.load("Imagenes/pelota.png") 
 
--Designamos unas variables
 
x = 170  
y = 170
 
while true do 
 
 
controls.read()
 
--Movimiento del objeto
 
if controls.down() then x = x + 1 
end
 
if controls.up() then x = x - 1
end
 
if controls.left() then y = y - 1
end
 
if controls.right() then y = y + 1
end
 
 
pelota:blit(y,x) --Bilteas la imagen
 
screen.flip() --Flip
end --Fin



Imagen de markef

Haber

Haber, antes de postear esta tontería respondiendo a lo mío lee con un poquito de atención.
Para empezar te dije que habías puestos puntos al lado de las coordenadas, por lo que probablemente LuaDEV salte con error.
Y lo otro que te dije es que estas bliteando la pelota con los ejes canviados...

Lee antes de postear.
Un saludo. 


Dicen que soy programador... Eso dicen.

Imagen de jorge_97

By Jorge_97

Marc te corrijo. Te has equivocado como tu yo tambien me he asombrado al ver la VARIABLE X como COORDENADA Y y viceversa. Pero debes recordar que son variables es decir las puedes llamar como tu quieras. Por lo tanto ese no es un error.

Respecto a los puntos pues si es un error pero no creo que fuera para ponerse del modo en que te has puesto tú. Todos tenemos derecho a equivocarnos, ¿No crees?


 

Ahora cito esta parte:

Haber, antes de postear esta tontería respondiendo a lo mío lee con un poquito de atención.

Deberias de aplicar este consejo a ti mismo. Leer con un poco de atencion.

Tambien te digo que ningun code es una tonteria, aunque el tuyo ciertamente esta mejor estructurado y tal, pero el suyo te recuerdo que es correcto a excepcion de los puntos asi que lo de "tonteria" guardatelo para ti, ademas me parece fenomenal por parte de vosotros los novatos que estais aprendiendo que os ayudeis entre vosotros.

Espero no haberte ofendido Marc y si lo he hecho pues no era mi intención.

 

 



 

PD: Recuerdo a todos los usuarios que esto es un foro de PSP, no un concurso de Prepotentes.


Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.

Imagen de markef

Claro

Claro que le puedes llamar como quieras, pero si estamos resolviendo las dudas de un coder novato no me vas a decir que vamos a ponerle las X por las Y. Lo lógico es que si ese valor se esta moviendo por un eje X no le vas a llamar Y. Si por llamar, le podriamos llamar Z o variable Arbol.
Y mi respuesta vino de lo siguiente "Lo que ha pedido es poder mover por pantalla la pelota pues hay lo tiene, no se cual es tu inconveniente." Solo pido que se lean bien los posts.
 


Dicen que soy programador... Eso dicen.

Imagen de jorge_97

By Jorge_97

Jaja claro que no es lo más conveniente pero te recuerdo que son variables.

Además yo no te dije en ningun momento que fuera adecuado usar una variable "x" para un eje "y" y viceversa, al contrario...

Lo dije porque te pusiste a decirle que estaba mal, incorrecto; esta bien pero no es muy usual.

 

Y mi respuesta vino de lo siguiente "Lo que ha pedido es poder mover por pantalla la pelota pues hay lo tiene, no se cual es tu inconveniente." Solo pido que se lean bien los posts.

 

Perdona pero eso está incompleto. Te la dejo aqui completa Marc:

Haber, antes de postear esta tontería respondiendo a lo mío lee con un poquito de atención.

 

Mi última citación te la dije principalmente por esta palabra: tontería .

Que no creo que ninguno aqui podemos valorar como tonteria cualquiera de los codes... 

 

Un saludo Marc


Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.

Imagen de markef

Haber

Haber jorge, no intentes buscar más paradigmas y respuestas extrañas de la vida. Seamos realistas por favor, el comentario en respuesta a lo mío no venía a cuento, por lo tanto comenté que era una tontería, no hay de que asustarse o asombrarse.
Respecto a lo de las variables, te sigo diciendo que es un error. La principal razón es porque estamos prestando ayuda a alguien que tiene que aprender y esta desempeñando un proyecto. La otra razón por la cual respaldo el orden de variables es el ejemplo de una matriz. Si hipotéticamente has de calcular el determinante de una matriz (pongamos por matriz A), lógicamente vas a escribir /A/ como determitante de la matriz, no la llamarás /B/. En cuestión de variables la documentación y la función se especifica claramente que la imagen trabaja sobre estos ejes de coordenadas, poniendo por primero un eje X y por segundo un eje Y.

image.blit(variable_de_imagen, x, y); o variable_de_imagen:blit( x, y);

Permiteme decir que es totalmente equivoco (lo que incluye decir que no es ni ortodoxo) el estar designando una variable contrária a la que se especifica dicha función.
Si el caso se hubiese dado con "a" o "b" no tendría por que decir nada, por el simple hecho de que no guardan una relación.

Dicho queda.

Un saludo jorge. 


Dicen que soy programador... Eso dicen.

Imagen de jorge_97

By Jorge_97

Como quieras Markef. Logicamente a este paso no conseguiré inculcarte mis ideas, ni tu a mi las tuyas...

Lo que te digo, te reitero, te repito... es que tienes RAZÓN claro que la tienes no se debe hacer lo de la variable X e Y. Pero no considero que ese "error" como tu lo llamas tenga la suficiente importancia como para decir que el CODE ENTERO es una tonteria y menos aún a alguien que acaba de empezar... si ese error lo comete Xerpi, Chimecho, Deviante... que no creo que lo cometan pues quizá si tiene mayor relevancia pero viniendo de un user que lleva programando menos de 15 días pues no lo veo logico. Me gustaría ver como eran nuestros CODES cuando empezamos... no eran ninguna tonteria. 

Dicho queda

Un saludo Marc


Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.

Imagen de markef

>.<

No entendiste ni papa, no dije en ningún momento que el code fuese una tontería, dije el comentario... Hay que ver...

Un saludo jorge.

Pd. Doy el tema por zanjado, si queréis llamarle casa y árbol, llamarle casa y árbol. 


Dicen que soy programador... Eso dicen.

Imagen de jorge_97

By Jorge_97

Dentro del comentario está el Code, además el code es casi el 96% del comentario:

 

Lo que ha pedido es poder

Lo que ha pedido es poder mover por pantalla la pelota pues hay lo tiene, no se cual es tu inconveniente.

Si lo quieres sin limite:

--Cargamos la imagen   pelota = image.load("Imagenes/pelota.png")   --Designamos unas variables   x = 170 y = 170   while true do     controls.read()   --Movimiento del objeto   if controls.down() then x = x + 1 end   if controls.up() then x = x - 1 end   if controls.left() then y = y - 1 end   if controls.right() then y = y + 1 end     pelota:blit(y,x) --Bilteas la imagen   screen.flip() --Flip end --Fin


Marc no discuto más contigo porque veo que esto ya no tiene límite y prefiero no llegar a mas...
Como dicen por mi pueblo: El problema llega cuando se juntan dos locos
Salu2 Compañero

Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.

Imagen de markef

¿Quieres

¿Quieres hacer el favor de leer mis comentarios? Me parece ya una infantilería que vengas diciendo estas cosas cuando especifiqué claramente que el comentario era una tontería y no venía a cuento. Dejar de darle cuera al tema, cada vez que quieres expresar una respuesta para no quedar mal te desvelas más.


Dicen que soy programador... Eso dicen.

Imagen de jorge_97

By Jorge_97

¿Quieres hacer el favor de leer mis comentarios? Me parece ya una
infantilería que vengas diciendo estas cosas cuando especifiqué
claramente que el comentario era una tontería y no venía a cuento. Dejar
de darle cuera al tema, cada vez que quieres expresar una respuesta
para no quedar mal te desvelas más.

Marc de verdad no te reconozco... no te responderé a lo primero porque no me da la gana pero a lo segundo. Te digo que yo comento porque quiero comentar no para quedar bien ;) y no se que desvelo. No escondo nada...

Salu2


Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.

Imagen de markef

No

No te lo tomes nada personal, ya sabes que no pasa nada, y tranquilo, ya se que no escondes nada a parte de un pingüino (pingüino linuxero) bajo un traje de Santa Claus o popularmente llamado en E.E.U.U. San Nicolás xDD


Dicen que soy programador... Eso dicen.

Imagen de jorge_97

By Jorge_97

JAJAJAJAJAJAJAJ

Nada simplemente es un tema con diferentes puntos de vista ;)

Me puse el pinguino vestido de Papá Noel/Santa Claus/San Nicolás porque buscaba algún avatar relacionado con la navidad y la programacion...

Salu2 Espero que jajasuperman solucionara la duda


Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.

Imagen de Tutos14

Si, porque con tanta disputa

Si, porque con tanta disputa creo que se habra hecho un lio xD

Imagen de markef

Si

Si te refieres a mí, mejor que lo discutamos por mensajería. jorge y yo por aquí discutimos, pero somos compañeros y no tenemos problemas. Y sí, otro comentario tontería que publicas... Nadio te dió vela en este entierro (es una expresión, antes de que empezemos a discutir por la vela xDDD).


Dicen que soy programador... Eso dicen.

Imagen de Tutos14

Lo que tu digas LLComo te

Lo que tu digas LL

Como te gusta criticar y desanimar a la gente(Sin ofender).

Somos mayores, dejemos de pelearnos por cualquier cosa.



Imagen de markef

Pues

Pues que poca autoestima tienes si te desanimaste xD Nadie ha desanimado a nadie en todo lo que llevamos de comentarios, solo son discusiones. Y lo dicho, no montes en esta publicación un sarao, si quieres algo me mandas un MP y se aclara por ahí ;)


Dicen que soy programador... Eso dicen.

Imagen de Tutos14

Yo solo lo que quiero es que

Yo solo lo que quiero es que dejeis de discutir.

Imagen de jorge_97

By Jorge_97

Nah! Nosotros discutimos de buen rollo xD. Simplemente tenemos ideas diferentes...

No creo que sea necesario llegar al punto al que habeis llegado.

Simplemente lo dejamos asi ;)

Un saludo compañeros!!


Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.

Imagen de sting18

Ok aqui se termina esta

Ok aqui se termina esta discusion sin sentido.

Imagen de Tutos14

Felicidades, si señor, bien

Felicidades, si señor, bien hablado.

Hay te van 50 bitos ;)

Imagen de markef

Y

Y por cierto, tienes otro error en el primer code, has escrito mal right.

Imagen de Tutos14

Ya, en el segundo lo he

Ya, en el segundo lo he correjido xD

Detodas formas gracias por el aviso.

Imagen de Tutos14

Lo de los puntos se me ha

Lo de los puntos se me ha pasado xD

Lo de los ejes ami me va bien asi ;)

Perdon si te he ofendido.

Imagen de markef

Con

Con lo que ya te comentaron abajo, ya solo queda poner los límites:

if eje_x_pelota >= 480 then eje_x_pelota = 480 elseif eje_x_pelota <= 0 then eje_x_pelota = 0 end;
if eje_y_pelota >= 272 then eje_y_pelota = 272 elseif eje_y_pelota <= 0 then eje_y_pelota = 0 end;

Si sabes las proporciones del objeto mejor, así no pasará por un pelín los bordes, en funcion de que eje de coordenadas hablemos y la posición (arriba o abajo, izquiera o derecha) sumará o restará.

Edito: Una vez puesto los controles con el pad digital, si también quieres que se pueda mover con el analógico añade:

controls.analogtodigital(127);

Se manejan bastante bien objetos como una pelota con el analógio, y mejor si podemos acceder a los dos controles.

Un saludo ;)


Dicen que soy programador... Eso dicen.

Imagen de User170294

Tienes que crear 2 variables,

Tienes que crear 2 variables, una para almacenar la posición X y otra para almacenar la posición Y. Así:

posX = 200;
posY = 100;

Luego tienes que imprimir en pantalla la pelota pero en vez de poniendo en su posicion X y su posicion Y unos valores pon donde tienes que poner la posicion X "posX" (sin comillas) y donde tienes que indicar la posicion Y donde se imprime la imagen "posY" (sin comillas). Más o menos así:

screen.blit(posX, posY, pelota);  --no recuerdo si los parametros de la función eran en ese orden pero ya me entiendes :p

por último haz una función que haga que cada vez que pulses el boton UP posY = posY-1 y cuando pulses DOWN posY = posY+1 (con el eje X lo mismo).

 

Ahora te toca pasarlo a forma de código. Pero eso ya sabrás hacerlo ;)

Si tienes cualquier duda o no sabes como pasarlo a código dímelo y te lo pongo.

Saludos.


Pues necesitas una o dos

Pues necesitas una o dos variables, dependiendo de lo que quieras lograr. Te dejo un ejemplo, para mover una pequeña plataforma:

x = 5  --Posición inicial de la plataforma. "y" no la defino, porque no me hará falta si sólo quiero mover la plataforma a los lados ;)
--NOTA ANTES DE SEGUIR: Usaré una plataforma de 20x5 pix
while true do
  controls.read()  --leo mis controles... para usarlos después
    if controls.right() and x < 455 then x = x + 5 end Si se presiona le flecha derecha, muevo la plataforma a la derecha, sin que se salga de la pantalla
      if controls.left() and x > 5 then x = x - 5 end --Lo mismo, pero a la izquierda
        draw.gradrect(x,262,20,5,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF)  --Dibujo mi plataforma, de color blanco, usando el módulo de dibujado de LuaDEV. Se puede en su lugar blitear una img ;)
  screen.flip() --Ya terminé... entonces flip xD
end
 
--[[  Más Notas...
Los límites... esos me los saqué de la manga xD
  455--> 480 - 5pix de holgura (para que la plataforma no llegue hasta el final de la pantalla) - 20 pix de ancho de la plataforma
  5--> 5 pix de holgura, igual que arriba
Al blitear, usé 262 en Y, que sería 272 - 5 pix de holgura - 5 pix de alto de la plataforma
 
0xFFFFFFFF--> Color blanco, es lo mismo que color.new(255,255,255)
 
Cualquier función que no entiendas... pregunta o mira la documentación xD
]]

Espero te sirva de guía. Si quieres mover algo verticalmente... inviertes las coordenadas (x constante con y variando), si lo quieres mover en las cuatro direcciones, pues x,y serán variables... formas hay muchas ;)

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.