Anuncios Google

Uso de la funcion math.ceil(Lua DEV)(Nueva Duda/Error)

Va, pues intente con esto:

smell = {}
smell[1] = image.load("smell.png")
asb = math.cos(0)
asb2 = math.sin(0)
 
 
while true do
asb = asb+math.cos(30)
asb2 = asb2+math.sin(30)
x = math.cos(math.rad(asb))
y = math.sin(math.rad(asb2))
smell[1]:blit(x,y)
if x==asb then
	x = x+asb 
end
if y==asb2 then
	y = y+asb2
end -- Si Y es igual que asb2, entonces Y sera igual a Y + asb2, lo mismo con X.
math.min(math.max(0,x), 480-50)
math.min(math.max(0,y), 272-50)
screen.flip()
end

Pero se queda estancado..


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

bueno

Eso pasa cuando se empieza por lo difícil y sin tener idea de lo que se va a hacer...

No suelo poner code, pero estás más perdido que adán en el día de las madres:

imagen = image.load("imagen.png")
ang = 0 -- ángulo inicial
 
while true do
	ang = ang + 10 -- SUMAS 10 grados cada vuelta, es decir, que 10 será la velocidad con la que se mueve
	x = math.cos(math.rad(ang)) * 10 -- math.cos DEVUELVE números entre 0 y 1, entonces para aumentar el radio MULTIPLICAS por el valor del radio
	y = -math.sin(math.rad(ang)) * 10 -- lo mismo que math.cos, DEVUELVE valores entre 0 y 1, para aumentar el radio MULTIPLICAS por el radio
 
	image:blit(x+240,y+136) -- bliteamos la imagen en el centro de la pantalla (no saldra centrada al 100% pero bueh... cosa de jugar con las coordenadas)
	screen.flip()
end

Espero que con eso quede claro...



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

Bueno..

Bueno..

Pues, si me faltaba la multiplicacion...

Gracias!.

Imagen de Chimecho

....

ando medio dormido (es tarde aki), pero bueno, si mañana no ha respondido nadie te respondo yo.

Asi por encimita, par de cosas: 361º es lo mismo que 1º, asi que no hay necesidad de reiniciar el angulo, y otra cosa, deberias inicializar el angulo en 0 y luego ir sumando en grados, cuando pases el angulo a las funciones seno y coseno, convierte a radianes con math.rad.

Y una ultima cosa, la base de un movimiento, es que una variable aumente cada vez que de una vuelta dentro del bucle, es decir, variable = variable + desfase, donde desfase es la cantidad que aumenta a cada vuelta.

Tamañana!



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

Ya intente

Ya intente con esto:

smell = {}
smell[1] = image.load("smell.png")
asb = math.cos(0)
asb2 = math.sin(0)
-- iniciamos los angulos en 0
 
while true do
asb = asb+30 
asb2 = asb2+30 -- A cada pasada los angulos aumentaran a 30
x = math.cos(math.rad(asb)+asb) 
y = math.sin(math.rad(asb2)+asb2)
smell[1]:blit(x,y)
math.min(math.max(0,x), 480-50)
math.min(math.max(0,y), 272-50)
screen.flip()
end

Pero no se mueve se queda estancado.

Imagen de Chimecho

....

claro que se mueve, solo que no lo notas, dos cosas:

  1. Lee este comment: http://psp.scenebeta.com/node/75425#comment-603183
  2. Pq sumas de nuevo asb y asb2 dentro de la función?, quítalo, no le veo sentido...

 



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

He actualizado

He actualizado el codigo, mira el Post, y ahora leo el coment...

 

Imagen de Chimecho

da hell?

pero si estaba bien...

ang = ang + 10 -- he puesto 10º
x = math.cos(math.rad(ang))
y = -math.sin(math.rad(ang))

Eso, prácticamente está bien, PERO, como dije en el comment de abajo, dan valores entre CERO y UNO, asi que máximo verás que se mueve un píxel, a penas y se nota...



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

Entonces

Entonces.... Necesito funciones que me den valores absolutos de Y y X o necesito multiplicacions en ves de sumas, digo para que se mueva NOTABLEMENTE?

Imagen de Chimecho

xD

a ver, digo que math.cos y math.sin devuelven valores entre 0 y 1, sólo sería cosa de multiplicar los valores que te devuelvan por el valor del radio del círculo y ya tienes.



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

Hise

Hice esto:

smell = {}
smell[1] = image.load("smell.png")
asb = math.cos(0.8)
asb2 = math.sin(0.8)
 
while true do
asb = asb*360 -- el valor que devuelven asb(math.cos(0.8)) multiplicado por el radio del circulo.
asb2 = asb2*360
x = math.cos(math.rad(asb))
y = -math.sin(math.rad(asb2))
smell[1]:blit(x,y)
math.min(math.max(0,x), 480-50)
math.min(math.max(0,y), 272-50)
screen.flip()
end

Pero nada no se mueve, sigue igual..

 

Imagen de Chimecho

....

Imagen de barney77

S:

S: o multiplico o sumo?... ya me confundiste..

Bueno mira aprte de que sigue el mismo problema tengo otro, presiono X, O cumplo cualquiera de los ifs y nada... no hace nada:

smell = {}
smell[1] = image.load("smell.png")
asb = 0.8
asb2 = 0.8
 
while true do
asb = asb+360
asb2 = asb2+360
x = math.cos(math.rad(asb))
y = -math.sin(math.rad(asb2))
smell[1]:blit(x,y)
screen.print(0,150,"Press X for activate Usb or Press O for desactivate Usb) xD",color.new(0,190,0))
if controls.press("cross") then
	usb.on()
end
if controls.press("circle") then
	usb.off()
end
math.min(math.max(0,x), 480-50)
math.min(math.max(0,y), 272-50)
screen.flip()
end

EDITO: Era el controls.read() xD..

Bueno pero con lo otro.. mira el code, dime en qe fallo, ponme la linea donde fallo-

Imagen de barney77

Va

Va que va, ahora a seguirle dando, eso mero te decia usar multipicaciones!.

Saludos y de verdad gracias Chime.

Imagen de barney77

Gracias

Gracias, y seguro que vies en México, yo en el DF y son la 1:30 de la mañana.

Imagen de Chimecho

Na...

Soy de Ecuador, y era un poquito más tarde que esa hora.

En fin, como vas?

Imagen de barney77

Pues

Pues apenás voy a reaundar el proyecto, esque ah!, como es la Escuela.

Saludos Chime.

Imagen de Chimecho

Bueh...

No soy un maestro de las artes gráficas, pero creo que con esto basta para explicar:

(seee, paint powa! xD)

Vale, el punto x,y es el punto que queda justo en el borde del círculo para el ángulo ang, entonces, para obtener las coordeandas, tenemos las siguientes fórmulas:

  • math.cos(ang) te da la coordenada x
  • math.sin(ang) te da la coordenada y

Pero ojo, que estas dos funciones reciben ángulos en radianes, no en grados, pero en Lua disponemos de math.rad(grados) para convertir. Además, estas dos funciones devuelven valores entre 0 y 1, osea que con una multiplicación puedes aumentar el radio.

Ahora, una cosa importante, math.sin toma como positivo lo que está arriba, es decir que: math.sin(math.rad(90)) da como resultado 1, y math.sin(math.rad(270)) da como resultado -1, ten en cuenta que la psp trabaja al revés, negativo arriba, positivo abajo.

Espero te sirva :)



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

Pues

Pues nada mas que decir: eres un maestro! xD, no sabes de cuanto me servirá esto.

VALE HE ECHO ESTO:

smell = {}
smell[1] = image.load("smell.png")
asb = math.rad(20)
 
 
while true do
asb = asb+asb
x = math.cos(math.rad(360))
y = math.sin(math.rad(36)+asb)
smell[1]:blit(x,y)
math.min(math.max(0,x), 480-50)
math.min(math.max(0,y), 272-50)
if asb<360 then 
	asb = 0
end
if asb==0 then
	asb = asb+asb
end
screen.flip()
end

Peo se queda estancada en uan cordenada.

math.ceil redondea HACIA

math.ceil redondea HACIA ARRIBA. OJO: redondea números con decimales solamente. Si le pasas un entero, te devuelve el mismo entero. Ejemplos (número introducido - número devuelto):

  • 1 - 1
  • 1.3 - 2
  • 5.999 - 6
  • 3.0001 - 4
  • 4 - 4

Si gustas ver de manera más tangible cómo funciona, revisa este código:

--Ejemplo con math.ceil
 
 
while true do
 
      for i=0, 20, 0.2 do
            screen.print(50,50,"Redondeando... "..math.ceil(i))
                  screen.flip()
      end
 
end

La salida serán sólo números enteros, que cambiarán suficientemente lento como para verlo.

Imagen de barney77

Ah

Ah, tú siempre ayudandome xD, ok, solo tuviste el diminuto error de no cerrar el for, otra duda acerca del for, el argumento que dice 0.2 es la velocidad en la que se mostraran los cambios de numeros o el tamaño de la letra?.

Otra pregunta más, es lo mismo poner (i) a [i]?..

Y por ultimo, entonces si me devuelve esos numeros, como haré para que la cordenada se mueva(redondee), ya que he intentado con: x = math.ceil(150.3). Y se queda estancado en una cordenada.

Nuevamente gracias!

Que va, si estaba cerrado,

Que va, si estaba cerrado, pero tenía otro error xD

Bueno, te cuento sobre el for. La 3a opción es el "paso". Normalmente ves que los for sólo llevan dos números, no? El inicio y el fin del ciclo. Eso es porque si no especificas el 3ro, por omisión se toma como 1.

El for que he puesto, aumenta 0.2 cada pasada a la variable i, es decir, i valdrá 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2... y así hasta llegar a 20.

Cuando haces una llamada a una función, siempre debes usar paréntesis. Los [corchetes] se usan con tablas.

Tu coordenada jamás se va mover, porque no tienes código para que lo haga. Es decir, siempre le pasas a math.ceil el mismo argumento (el entero).
Si quieres que se mueva, pues pon algo de código que mueva una variable, y pásale esa variable a math.ceil, como lo hice en el ejemplo que te dejé (no necesariamente debe ser un for, puede ser cualquier cosa, incluso una vil suma, tipo x = x + algo xD)

Imagen de barney77

Ok,

Ok, gracias.

Ahora intentaré.

EDITO: Mirá he intentado así_

smell = { img=image.load("smell.png"), vl=2}
Abs = x2+smell.vel
x = math.ceil(150.3+Abs)
y = 0
x2 = 130
 
while true do
smell.img:blit(x,y)
screen.flip()
end

Y me maca: script.lua2: bad argument #1 to ceil(number expected, got nil ).

Cuidado... estás usando una

Cuidado... estás usando una variable, y la declaras después, eso no debe ser. Siempre se declaran primero, y se usan debajo.

Las líneas 2 y 3 de ese script ponlas debajo de la declaración de x2

PD. En la tabla pusiste vl en lugar de vel, cuidado xD

Imagen de barney77

Que va

Que va, sigue igual, mira:

smell = { img=image.load("smell.png"), vl=2}
y = 0
x2 = 130
m = x2+smell.vl
x = math.ceil(150.3+m)
 
while true do
smell.img:blit(x,y)
screen.flip()
end

Se estanca en una cordenada D=, disculpa ser tna preguntón, esque ah! que dificl D=.

Líneas 4 y 5, mételas al

Líneas 4 y 5, mételas al while.

Imagen de barney77

Va, pues.

Va, pues

Se sigue estancando, ahora tengo el code así:

smell = { img=image.load("smell.png"), vl=5}
y = 0
x2 = 130
 
 
while true do
smell.img:blit(x,y)
m = x2+smell.vl
x = math.ceil(150.3+m)
screen.flip()
end
 

Me marca que el primer argumenteo de el bliteo es un valor nulo, seguro es porque declare la variable x despues de usarla.

Y he intentado así:

smell = { img=image.load("smell.png"), vl=5}
y = 0
x2 = 130
 
 
while true do
x = math.ceil(150.3+m)
m = x2+smell.vl
smell.img:blit(x,y)
screen.flip()
end

Y se queda estancado.

Definitivamante me debo

Definitivamante me debo dedicar a otra cosa...

--Código
 
m = x2+smell.vl
 
while true do
x = math.ceil(150.3+m)
m = m+smell.vl
 
--Más código

Imagen de barney77

Va,

Va, una pregunta más..

Aparte de que no redondea si no se sige de largo...¿porque se tiene que sumar m dentro del bucle?, por cada pasada o que?

Imagen de Chimecho

este...

Una cosa, redondear, no es hacer círculos, redondear es pasar un número decimal a uno entero siguiendo una fórmula, como por ejemplo en math.ceil(numero) que redondea para arriba, es decir, coge todo lo que está antes del punto, le suma uno y te lo devuelve. En el caso de math.floor(numero) coge lo que está antes del punto, le resta uno y te lo devuelve...



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 Chimecho

oops

Ahora que leo de nuevo mi comment, tengo un error xD

Lo que quise decir al final es: math.floor(numero) coge lo que está antes del punto y te lo devuelve...



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

Ah..

Ah.. rayos...

Que bobo soy, entonces tendré que hace rmi script de diferente manera..

O sabes que funcion me ayudaria a hacer un circulo pues, que la figura se mueva en circulo.

Imagen de Chimecho

sep

Busca en la docu por math.sin, math.cos, math.rad, math.deg, y en wikipedia: seno y coseno, te ayudará bastante para saber que hacer :)



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

Grace

Grace ahora investigo y analizo :D

 

Exacto, cada pasada del

Exacto, cada pasada del bucle, toma el valor anterior de m y le suma smell.vl.

Antes de entrar, inicializamos m con un valor fijo, y al entrar al while, empezará a cambiar.

Imagen de barney77

Vale,

Vale, gracias rober! :')

math.ceil(255.3) es

math.ceil(255.3) es  256

math.floor(255.3) es 255

lo que hace es redondear el numero que tengas dentro del paretesis.

Imagen de barney77

Aver,

Aver, deja intento redondeando la cordenada X.

EDITO: Se queda estancado, no redondea.

PD= Porque lo pones en decimal(255.3)?

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.