Mover de derecha a izquierda y viceversa.

Ahora se mueve pero no todo..

Solo hasta la cordenada X50(creo)

Otra cosa, quiero que se mueva de X=0 a X=480 y viceversa TODO EL TIEMPO..

Pff aqui el code:

dofile("System/Recursos/Utl.lua")
 
while true do
controls.read()
asb=asb+5
x=math.cos(math.rad(asb))*140
y=-math.sin(math.rad(asb))*140
AstroT[3].fondo:blit(0,0)
AstroT[1].smell:blit(x+240,y+106)
AstroT[4].smell2:blit(math.floor(y),100)
AstroT[2].mira:blit(AstroT[2].x,AstroT[2].y)
screen.print(100,100,"Testeo Vbeta",tclrs[3])
movePad(AstroT[2])
moveF(AstroT[2])
 if y > 272-AstroT[4].h or y< 0 then mv=mv * -1 end
y=y+mv
if controls.press("cross") then
	sound.play(AstroT[5].sdp)
end
if controls.press("circle") then
	usb.on()
end
if controls.press("triangle") then
	usb.off()
end
if controls.press("triangle") then
	dofile("script.lua")
end
AstroT[2].x = math.min(math.max(0,AstroT[2].x), 480-AstroT[2].w/2)
AstroT[2].y = math.min(math.max(0,AstroT[2].y), 272-AstroT[2].h/2)
screen.flip()
end

PD= DIganme si se puede en lau DEV, digo pa' no hacer mas esfuerzo


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

mmm...

Yo normalmente uso algo similar para efectos de "respiro", osea, que aumente el alfa de una imagen y luego disminuya automaticamente de forma infinita.

posx = 0 -- posicion original en X
desx = 5 -- desfase en X
 
while true do
    draw.fillrect(posx,10,20,20,color.new(255,0,0))
    posx = posx + desx -- la posicion se le suma el desfase, en el primer caso será posx + 5
    if posx >= 480 - 20 then -- 480 - ancho de la imagen
        desx = -5 -- para que la suma, cambie a resta, es decir, pasamos de posx + 5 a posx - 5, así irá hacia la izquierda
    elseif posx <= 0 then -- limite izquierdo de la pantalla
        desx = 5 -- claro... ahora debe ir a la derecha
    end
    screen.flip()
end

Y con eso tienes movimiento infinito :D

Saludos!



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 -_-

Imagen de barney77

Gracias

Gracias lo probare :D.

EDITO: Me ha funcionado, gracias :b.

Imagen de iRVing_Prog

Función

Yo me hice está función para EJMMDM me sirvio bastante, incluso la use para otros HBs

function moverX(objeto,lim1,lim2)
 
	if objeto.dir == "l" then
 
		objeto.x = objeto.x + objeto.vel
 
	elseif objeto.dir == "r" then
 
		objeto.x = objeto.x - objeto.vel
 
	end
 
	if objeto.x == lim1 then
 
		objeto.dir = "l"
 
	elseif objeto.x == lim2 then
 
		objeto.dir = "r"
 
	end
 
end

La función mueve el objeto en X, tengo otra que lo hace en Y solo es cuestión de cambiarle unas cosillas. Los parámetros que se le pasan es la tabla del objeto que debe contener mínimo X,Y,vel  para que funcione adecuadamente. Un ejemplo seria:

moverX(carro,10,300)

En el caso anterior el objeto sera carro y los limites 10 y 300  osea que cuando su posición sea 10 ira hacia la derecha y cuando sea 300 irá hacia la izquierda.

Hay que tener mucho cuidado en algo a la hora de usar este tipo de funciones y eso es la velocidad, por ejemplo si tu le pones que la velocidad sea 3 y el limite es 32 si no se cumple ese numero(lo cual es obvio ningún numero multiplicado por 3 da 32) lo que hará es seguir de largo y se seguirá moviendo, que es lo que creo que hasta ahora te pasa según comentas abajo.

Salu2 :D


 

Imagen de barney77

Mmm

Mmm pero entonces para que se mueva tiene que estas la cordenada en 10?..

Osea: AstroT[4](0,480)

SI  AstroT[4] está en 0 ira a la derecha y cuando llege a 480 ira a la izquierda?

Y el bliteo como lo hago?, en que cordenadas..

Esque lo hise asi: AstroT[4]:blit(0,50) y se queda estancado en 0 y 50.

Intente con esto:

dofile("System/Recursos/Utl.lua")
 
while true do
controls.read()
asb=asb+5
x=math.cos(math.rad(asb))*140
y=-math.sin(math.rad(asb))*140
AstroT[3].fondo:blit(0,0)
AstroT[1].smell:blit(x+240,y+106)
AstroT[4].smell2:blit(460,50)
AstroT[2].mira:blit(AstroT[2].x,AstroT[2].y)
screen.print(100,100,"Testeo Vbeta",tclrs[3])
movePad(AstroT[2])
moveF(AstroT[2])
moverX(AstroT[4],460,0)
if controls.press("cross") then
	sound.play(AstroT[5].sdp)
end
if controls.press("circle") then
	usb.on()
end
if controls.press("triangle") then
	usb.off()
end
if controls.press("triangle") then
	dofile("script.lua")
end
AstroT[2].x = math.min(math.max(0,AstroT[2].x), 480-AstroT[2].w/2)
AstroT[2].y = math.min(math.max(0,AstroT[2].y), 272-AstroT[2].h/2)
screen.flip()
end

Script

Utl:

------VARIABLES----
-------------------
-------------------
 
tclrs={}
AstroT={}
S={}
asb=0
x=0
mv=0.2
tclrs[1]=color.new(255,0,0)
tclrs[2]=color.new(0,0,255)
tclrs[3]=color.new(0,255,0)
AstroT[1]={smell=image.load("System/Recursos/Imagenes/smell.png")}
AstroT[2]={mira=image.load("System/Recursos/Imagenes/mira.png"),x=100,y=100,w=0,h=0}
AstroT[3]={fondo=image.load("System/Recursos/Imagenes/fondo.png")}
AstroT[4]={smell2=image.load("System/Recursos/Imagenes/smell2.png"),y=0,x=100,w=0,h=0,vel=5}
AstroT[5]={sdp=sound.load("System/Recursos/Music/Sn.wav")}
AstroT[2].h=AstroT[2].mira:height()
AstroT[2].w=AstroT[2].mira:width()
AstroT[4].h=AstroT[4].smell2:height()
AstroT[4].w=AstroT[4].smell2:width()
 
------FUNCIONES---
------------------
------------------
 
function movePad(object)
if math.abs(controls.analogy())>20 then object.y=object.y+controls.analogy()/10 end
if math.abs(controls.analogx())>20 then object.x=object.x+controls.analogx()/10 end
end
 
function moveF(object)
if controls.up() then
	object.y=object.y-12
elseif controls.down() then
	object.y=object.y+12
elseif controls.left() then
	object.x=object.x-12
elseif controls.right() then
	object.x=object.x+12
end
end
 
function move(object,vel)
if object.dir=="r" then 
	object.x=object.x+vel
elseif object.dir=="l" then 
	object.x=object.x-vel
elseif object.dir=="u" then 
	object.y=object.y-vel
elseif object.dir=="d" then 
	object.y=object.y+vel
end
if object.dir=="r" and object.x>=object.x2+1 then
	object.dir="l"
end
if object.dir=="l" and object.x<=object.x1-1 then
	object.dir="r"
end
if object.dir=="d" and object.y>=object.y2+1 then
	object.dir="u"
end
if object.dir=="u" and object.y<=object.y1-1 then
	object.dir="d"
end
end
 
function moverX(objeto,lim1,lim2)
 
	if objeto.dir == "r" then
 
		objeto.x = objeto.x + objeto.vel
 
	elseif objeto.dir == "l" then
 
		objeto.x = objeto.x - objeto.vel
 
	end
 
	if objeto.x == lim1 then
 
		objeto.dir = "r"
 
	elseif objeto.x == lim2 then
 
		objeto.dir = "l"
 
	end
 
end

Y bueh, se queda estancado.

Imagen de iRVing_Prog

MoverX

Lo puedes blitear donde se te antoje y en la posición que quieras, esto mientras esté en los limites, por ejemplo si lo quieres blitear en 0,50 lo ideal es que el limite 1 fuera 0 y el limite 2 sea hasta donde tu quieres que llegue en la derecha.

Se me olvidaba comentar que a la tabla del objeto también le tienes que agregar el elemento dir="l" o dir="r" dependiendo hacia donde desees que se comience a mover :D


 

Imagen de barney77

Ah

Ah, ya entendi, solo deja edito mi script ;).

EDITO: Ptm..

Pues, hice esto:

dofile("System/Recursos/Utl.lua")
 
while true do
controls.read()
asb=asb+5
x=math.cos(math.rad(asb))*140
y=-math.sin(math.rad(asb))*140
AstroT[3].fondo:blit(0,0)
AstroT[1].smell:blit(x+240,y+106)
AstroT[4].smell2:blit(0,50)
AstroT[2].mira:blit(AstroT[2].x,AstroT[2].y)
screen.print(100,100,"Testeo Vbeta",tclrs[3])
movePad(AstroT[2])
moveF(AstroT[2])
moverX(AstroT[4],0,450)
if controls.press("cross") then
	sound.play(AstroT[5].sdp)
end
if controls.press("circle") then
	usb.on()
end
if controls.press("triangle") then
	usb.off()
end
if controls.press("triangle") then
	dofile("script.lua")
end
AstroT[2].x = math.min(math.max(0,AstroT[2].x), 480-AstroT[2].w/2)
AstroT[2].y = math.min(math.max(0,AstroT[2].y), 272-AstroT[2].h/2)
screen.flip()
end

 

Pero se sigue quedando estancado, la velocidad es 5, y la direction "r"

What is te Fu** error?

Imagen de iRVing_Prog

es rarisimo

Si quieres para checar todo el code mandame un MP con el comprimido, con lo anterior que te he puesto deberia de funcionar, es muy raro.


 

Imagen de barney77

Ahi

Ahi te lo mando luego, ya que actualize el codigo y borre ese troso que llevaba...

 

Estoy seguro que ya te lo

Estoy seguro que ya te lo había dícho... pero no encuentro ese comentario. Bueno, lo dejo de nuevo, que es muy sencillo de implementar/entender:

--Movimiento--
 
cubo = image.create(100,100,color.new(0,250,250))
step = 0.2 --Velocidad del movimiento
y=0          --Posición inicial
 
while true do
 
     cubo:blit(50,math.floor(y))
          if y > 272-cubo:heigth() or y < 0 then step = step * -1 end
               y = y + step
                    screen.flip()
 
end

Imagen de barney77

Pues

    if y > 272-cubo:heigth() or y < 0 then step = step * -1 end Pues no recuerdo que me lo hayas dicho, pero supongo que me servira, ahora mismo estudio ;).

Por que *-1??...

EDITO: Use eso, pero se va para abjo y se sale de la pantalla.

Álgebra Básica

Si multiplicas un número cualquiera por otro negativo, cambia el signo del mismo. Así, si a step lo multiplico por -1, step valdrá ahora -0.2.

Una suma de un número positivo + un número negativo, resulta en la resta de ambos números (conservando el signo del mayor)

EDITO: revisa que lo estés implementando correctamente, porque con ese código que dejé tal cual, funciona correctamente.

Imagen de barney77

Si

Si ya entendi la condicion, y ya logre que se moviera como quiero, pero se pasa de la pantalla(desconosco por que!).

Mirad el code:

if y > 272 -AstroT[4].h or asb2 < 0 then
    asb3=asb3*-1
end

 

 

Ah, y asb 3 es igual a 0.2, y asb2 es la posicion Y

No será porque estás usando

No será porque estás usando "y" y asb2 al mismo tiempo en la condición? Usa asb2 en toda la condición.

Imagen de barney77

Pues

Pues he echo esto:

dofile("System/Recursos/Utl.lua")
 
while true do
controls.read()
asb=asb+5
x=math.cos(math.rad(asb))*140
y=-math.sin(math.rad(asb))*140
AstroT[3].fondo:blit(0,0)
AstroT[1].smell:blit(x+240,y+106)
AstroT[4].smell2:blit(math.floor(x),100)
AstroT[2].mira:blit(AstroT[2].x,AstroT[2].y)
screen.print(100,100,"Testeo Vbeta",tclrs[3])
movePad(AstroT[2])
moveF(AstroT[2])
 if x > 480-AstroT[4].w or x< 0 then mv=mv * -1 end
x=x+mv
if controls.press("cross") then
	sound.play(AstroT[5].sdp)
end
if controls.press("circle") then
	usb.on()
end
if controls.press("triangle") then
	usb.off()
end
if controls.press("triangle") then
	dofile("script.lua")
end
AstroT[2].x = math.min(math.max(0,AstroT[2].x), 480-AstroT[2].w/2)
AstroT[2].y = math.min(math.max(0,AstroT[2].y), 272-AstroT[2].h/2)
screen.flip()
end

Y se mueve pero se regresa en la coordenada 50 o 75(aprox)

EDITO: Olvidalo, Irvin ya me está ayudando, vere si la de él es lo que busco porque presiento que la tuya no.

Imagen de NauTiluS1

Qué fastidio xD

Te lo he dicho 9 veces.

Imagen de barney77

xD.

xD, pero creo que es mi ebot o algo así, ya que en otro code que tengo IGUAL, si se mueve viceversa =(.

Imagen de NauTiluS1

Qué fastidio xD nueva forma

Nah, pues mira crea un crono y una variable de un valor, y que a cada pasada del bucle y la variable es igual a 1 el objeto se mueva y le sume 1 valor y qué cuándo haya pasado ej 5 segundos y la variable sea igual a 2 el objeto v se mueva para abajo y qué le reste 1 a variable...


Follow me twitter nautilus1_jmccu!!
Sony, ya a nadie le interesa tus UMD si alguien compra una psp es por nosotros los coders. Madura y has un FW que haga la diferencia y anime a las personas en comprar un PSP

Imagen de barney77

Mmm

Mmm creo que si entendi, ahora pruebo.

El crono es con os.time() ?

Probe con esto:

dofile("System/Recursos/Utl.lua")
 
while true do
controls.read()
asb=asb+5
asb2=asb2+1
x=math.cos(math.rad(asb))*140
y=-math.sin(math.rad(asb))*140
AstroT[3].fondo:blit(0,0)
AstroT[1].smell:blit(x+240,y+106)
AstroT[4].smell2:blit(100,math.floor(asb2))
AstroT[2].mira:blit(AstroT[2].x,AstroT[2].y)
screen.print(100,100,"Testeo Vbeta",tclrs[3])
movePad(AstroT[2])
moveF(AstroT[2])
if crono==1 then
	AstroT[4].x=AstroT[4].x+asb2
end
if AstroT[4].x==480 then
	AstroT[4].x=AstroT[4].x-asb2
end
if controls.press("cross") then
	sound.play(AstroT[5].sdp)
end
if controls.press("circle") then
	usb.on()
end
if controls.press("triangle") then
	usb.off()
end
if controls.press("triangle") then
	dofile("script.lua")
end
AstroT[2].x = math.min(math.max(0,AstroT[2].x), 480-AstroT[2].w/2)
AstroT[2].y = math.min(math.max(0,AstroT[2].y), 272-AstroT[2].h/2)
AstroT[4].x = math.min(math.max(0,AstroT[4].x), 480-AstroT[4].w/2)
AstroT[4].y = math.min(math.max(0,AstroT[4].y), 272-AstroT[4].h/2)
screen.flip()
end

Y si baja pero no se va a los lados :(, aparte se pasa de la pantalla, la variable crono tiene como valor os.time() en el archiv utl.lua

Y asb2 tiene como valor 1.

Imagen de Dioni0396

Es

timer.new()

Imagen de barney77

Ah

Ah gracias.

Imagen de NauTiluS1

Qué fastidio xD

xd = timer.new() T.T if xd:time() >= milisegundo then

Imagen de barney77

Olvidalo

Olvidalo, deje de intentar eso desde hace horas, Irving me está ayuando, si tu puedes ayudarme en el coment e arriba, mejor :D.

Imagen de Dioni0396

Pero el movimiento

quieres que sea automatico o dirijiendolo tu?

Imagen de barney77

Automatico

Automatico.

Imagen de Dioni0396

Entonces ni idea

Entonces ni idea, yo solo sabia el manual

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.