Anuncios Google

[LUA] Problema con sonidos y entrada de botones[SOLUCIONADO]

Hola

Estoy desarrolando una aplicación con LUA y para este fin necesito saber como hacer que para cuando pulse un boton concreto suene un sonido concreto.

He probado asi:

if pad:left() then

variabledesonido.play()

end

Y todo habiendo antes cargado el sonido [Sound.load()] y el control [Controls.read()]

Tambien tengo el problema de que quiero que al pulsar un boton pase alguna cosa, pero que cuando deje de pulsar el boton siga igual.

if pad:r() then
image:blit(0, 0, imagen)
end --es decir, que cuando pulse la R se cambie el fondo
 
--como hago para que al soltar el boton no vuelva a estar como antes?

Espero que alguien pueda ayudarme.



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

SceneBET y PSP Euskaraz 2... ¿Pronto?


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

Aver

Chimecho lo puedes repetir ? XDDDDDDDDD

 

Salu2

Imagen de Chimecho

Bueno, aquí te dejo un

Bueno, aquí te dejo un ejemplo de como sería en LUA HM7

 

System.oaenable()  -- Esto es para poder usar el módulo sound, sólo debe ser usado una vez, si no, causa freeze
 
oldpad = Controls.read() -- Te la explico más abajo
 
sound = sound.load("sonido.wav",false) -- Cambia sonido.wav por tu sonido; El false es para que no se reproduzca repetitivamente, la función módulo sound.load() va así:  sound.load(ruta,loop) si loop es true se reproduce repetitivamente, por eso le he puesto false
 
while true do -- Empieza el bucle
screen:clear() -- Limpia la pantalla
pad=Controls.read() -- Lee los controles
 
if pad:left() and not oldpad:left() then -- Te la explico más abajo
sound:play() -- Reproducir el sonido
end -- Fin del if
 
oldpad = pad -- También te la explico más abajo
 
screen.flip() -- Bien, todo lo que se hace o se imprime en "pantalla" en realidad se imprime en un buffer, osea, fuera de la pantalla, luego con screen.flip() lo que hacemos es intercambiarlos, osea, lo que está en el buffer pasa a pantalla.
 
screen.waitVblankStart() -- Esto es para el sincronismo vertical, todo tarda cierto tiempo en imprimirse en pantalla, si ese tiempo que tarda es mayor a la frecuencia con que se actualiza la pantalla, se verá una "línea" de separación, en programas que tardan más hay que ponerle un "retraso", screen.waitVblankStart(2) por ejemplo.
 
end -- Fin del bucle while

 

Pues bien, el oldpad=Controls.read() del inicio, es por el if que está dentro del while, necesita que la variable oldpad esté inicializada para poder hacer una comparación.

Luego, el if pad:left() and not oldpad:left() then es para que ejecute la acción dentro de él una sola vez, en este caso, sound:play().

y por útltimo el oldpad=pad, te lo explico con un ejemplo.....

Primera vuelta:

no has presionado nada, entonces oldpad:left() será false al igual que pad:left(), al hacer la comprobación del if pad:left() and not oldpad:left() sería: if false and not false then, (not false = true) esto da como resultado false, por lo tanto no entra al if.

olpad=pad -- sigue igual

 

Ahora, en una de las vueltas del while, presionas "left", entonces....

pad:left() sería true

oldpad:left() sería false porque conserva el valor de la anterior vuelta

ahora: if pad:left() and not oldpad:left() then sería: if true and true then --- Justo en este momento entra al if y ejecuta la acción.

oldpad=pad -- ahora oldpad:left() es true

fin de esa vuelta

 

Ahora, en la siguiente vuelta tenemos:

pad:left() sería true, ya que las vueltas del while son muy rápidas y en teoría, sigues presionando left

oldpad:left() sería true por la vuelta anterior

ahora: if pad:left() and not oldpad:left() then sería: if true and false then ---ya no entra más

oldpad=pad -- oldpad:left() sigue siendo igual a true

fin de esa vuelta

 

y así para las demás vueltas....

Espero haberme explicado....

 

Ahora para lo de las imágenes:

imagen = Image.load("imagen.png") -- Cargamos la imagen
 
mostrar=0 -- Esta variable la usaremos para saber si mostrar o no la imagen
 
while true do -- Bucle infinito
screen:clear() -- Limpiamos la pantalla
pad=Controls.read() -- Leemos los controles
 
if pad:r() then -- Si presionamos R
mostrar=1 -- Mostar será 1
end -- Fin del if
 
if mostrar==1 then -- Sólo si mostrar es 1
image:blit(0,0,imagen) -- Mostramos la imagen
end -- Fin del if
 
screen.flip() -- Imprimimos en pantalla
screen.waitVblankStart() -- Sincronismo vertical...
end -- Fin del while

Eso debería funcionar...

Saludos, y espero haberte ayudado



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

Por parte de la respuesta de

Por parte de la respuesta de lo de la imagen: Lo he probado y me funciona bien. Lo he pillado y me viene fantastico. Muchas gracias.

Luego, lo de los sonidos, ya probe a poner lo del oaenable() o como sea, pero me decia que era un valor nulo.



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

SceneBET y PSP Euskaraz 2... ¿Pronto?

Imagen de Chimecho

Es que tu usas luaplayer

Es que tu usas luaplayer 0.20 y yo he puesto el ejemplo en LUA HM7....

Saludos!

Imagen de unai.

Y el LUA Player HM7 es para

Y el LUA Player HM7 es para PSP? Vale, creia que era un reproductor para PC... Menudo fallo de principiante. Muchas gracias.

Ya de paso, ¿De donde lo descargo? :P En scenebeta solo hay hasta la HM3...



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

SceneBET y PSP Euskaraz 2... ¿Pronto?

Imagen de Chimecho

Hola, pues en scenebeta solo

Hola, pues en scenebeta solo hay hasta la HMv3 que sería HM10, con la que mejor me ha ido (Hasta la aparición de luaDev), es con HM7 aquí te dejo un link de descarga del HM7:

http://psp.scenebeta.com/system/files/private/LuaPlayerHM7CF...

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

OK, muchas gracias. Te debo

OK, muchas gracias. Te debo unas cuantas ;)

Imagen de Chimecho

^^

Nah, no te preocupes, solo me gusta ayudar.....

Dentro del arhivo de la descarga hay un txt "Functions.txt", allí están todas las funciones de LUA HM7, pero están en inglés.

Suerte!



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

En fin, aprece que LUA esta

En fin, aprece que LUA esta contra mi... espero no parecer pesado:

while true do
pad = Controls.read()
screen:clear()
oldpad = Controls.read()
 
if pad:left() and not oldpad:left() then
do1:playFile("System/sonidos/nota.mp3",false)
end
 
screen.waitVblankStart()
screen.flip()
end

No me reproduce!! Me desespero mucho!! jeje

¿Que puedo hacer?



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

SceneBET y PSP Euskaraz 2... ¿Pronto?

Imagen de Chimecho

?

Mira el ejemplo que te puse arriba.

Imagen de unai.

Joder, como estoy o.O Sera

Joder, como estoy o.O Sera porque estoy en examenes jeje. Ya le echare un vistazo

Imagen de PSPPRECIZO

Pues mira te dejo un

Pues mira te dejo un pequeño ejemplo:

--Fragmento de codigo sacado del Guitarra Simulador
 
blanco = Color.new(255,255,255)---creamos el color
oldpad = Controls.read()--variable
 
Do = Sound.load("sonidos/b1.wav",false)--cargamos el sonido(el false sirve para que no se reprodusca el sonido)
 
function noPRES()--Yo hice una funcion para mayor comodidad(llamada noPRES() que significa que no presionamos)
screen:clear()--Limpiamos la pantalla
pad = Controls.read()--variable de los controles
 
----******Lo que viene es para que cuando presionamos Izquierda(left) se reprodusca el sonido)****---
 
if pad:left() and oldpad:left() ~= pad:left() then--Presionamos El boton del pad izquierdo y...
local sonido = Do
voz = sonido:play()--reproduce el sonido
end--terminamos
 
screen.waitVblankStart()--Esto siempre deves ponerlo al final de tu codigo
screen.flip()--Igual esto
end--Y para terminar esto
 
----------------Termina pulsaciones(<eof>) es para acabar el codigo-----------
while true do
pad = Controls.read()--Variable
 
if nopres() then--la funcion
end--la terminamos de ejecutar
 
oldpad = pad--tambien esta la terminamos
end--esta para acabar

no lo prove bien,pues porque no tengo el codigo de la aplicacion aqui,puse de lo que me acuerdo :P,talvez tenga algun fallo,pero intenta mas al rato lo vere de nuevo.

Salu2.


simpson
mgs

v10.0

Imagen de unai.

Muchas gracias, pero el LUA

Muchas gracias, pero el LUA Player me dice que nopres() es un valor nulo. Tambien he probado a corregir y poner nopress() pero me dice lo mismo.

Y una cosa mas, no llego a entender para que sirve el oldpad si se le da el mismo valor que a pad que es Controls.read() . ¿Podrias explicarme bien esas funciones, y las que van despues del screen.flip()?



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

SceneBET y PSP Euskaraz 2... ¿Pronto?

Imagen de PSPPRECIZO

Pues mira la funcion

Pues mira la funcion nopres() es una funcion creada por el mismo interprete que al final de todo es una variable pero es muy util ala hora de no querer escribir todo un codigo cuando ya la variable con el codigo la tienes almacenada,tambien sirve para que tu codigo sea mas fluido,lo de oldpad es bastante importante,pues es como control universal de tu codigo,si no funciona pad=Controls.read por alguna razon,ponemos lo de oldpad y funcionara,lo que sigue de screen.flip es para terminar el codigo,para que no te salga el error de <eof> en el PSP,mira:

while true do
pad = Controls.read()--ponemos la variable para que pueda ser terminada

if noPRES() then--igual ponemos esta funcion creada
end--con esto terminamos la de arriba y esta.

oldpad = Controls.read()--esta tambien hay que terminarla
end--con esta terminamos oldpad

en fin esto sirve para que no sigan ejecutandose infinitamente las funciones.

Salu2


simpson
mgs

v10.0

Imagen de ipn2

Mira

no se mucho de lua apenas estoy aprendiendo, pero al leer el codigo dice algo asi

 function noPRES()--Yo hice una funcion para mayor comodidad(llamada noPRES() que significa que no presionamos)

Osea que psppreziso creeo esa funcion que mas arriba del codigo debiera estar definida (asi es en C);

otra cosa en que lua programas?

por que algunas cosas cambian en distintos luas pero todo se puede acoplar vale;

espero haber ayudado


Un Saludo

IPN2

Imagen de unai.

Pues no se, la verdad, estoy

Pues no se, la verdad, estoy siguiendo el tutorial de "Una forma alternativa de iniciarse en LUA" o algo asi de ELeNDeR. Uso el LUAPlayer 0.20 para PSP, ya que mi objetivo es programar para PSP.

Y, si como tu dices, la funcion deberia estar arriba definida, en el codigo que compartio no estaba definido, y por eso fallaba.



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

SceneBET y PSP Euskaraz 2... ¿Pronto?

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.