Anuncios Google

(Solucionado) Ayuda Con Lua...!!!!

end
end
 
function collisionWallsCheck(obj)
if(obj.x + playerWidth < 35) or   -- es aqui donde me dice que hay un error.!!
   (obj.x + playerWidth > 475) or 
   (obj.y + playerHeight < 35) or 
   (obj.y + playerHeight > 268)
then 
obj.x = oldx
obj.y = oldy
end

ya edite el codigo y me sigue diciendo que en esa linea hay un valor nil(nulo no valido).

alguien me podria echar una manita, estoy haciendo un jueguito,muy muy sencillo....

 

saludos y gracias


===========

2 Pasos a la libertad.

sudo apt-get remove Windows
sudo apt-get install Gnu/Linux

==================================================

Linux se crea y no se destruye, solo se transforma.


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 cristianrap

He modificado tu codigo..

He conseguido que me funcione asi:

 

blue = Color.new(0,0,255)
green = Color.new(0,255,0)
white = Color.new(255,255,255)
 
player1 = Image.createEmpty(32,32)
player1:clear(blue)
block = Image.createEmpty(32,32)
block:clear(green)
player = {x = 30, y = 100}
playerHeight = 32
playerWidth = 32
 
Block = {}
Block[1] = {x = 100,y = 80, height = block:height(), width = block:width(),k = 3,h = -2}
Block[2] = {x = 300,y = 30, height = block:height(), width = block:width(),k = -1,h = -2}
Block[3] = {x = 200,y = 58, height = block:height(), width = block:width(),k =-2,h = 2}
 
function movePlayer()
pad = Controls.read()
if pad:left() then
player.x = player.x-2
end
if pad:right() then
player.x = player.x+2
end
if pad:up() then
player.y = player.y-2
end
if pad:down() then
player.y = player.y+2
end
end
 
function moveBlock(bloc)
bloc.x = bloc.x + bloc.k
bloc.y = bloc.y + bloc.h
end
 
function collisionWallsBlockCheck(obj)
if (obj.x + playerWidth<35) or 
   (obj.x + playerWidth>475) then 
obj.k = -(obj.k)
end
 
if (obj.y + playerHeight<35) or 
   (obj.y + playerHeight>268) then 
   obj.h = -(obj.h)
end
end
 
function collisionWallsCheck(obj)
if(player.x + playerWidth < 35) or
   (player.x + playerWidth > 475) or 
   (player.y + playerHeight < 35) or 
   (player.y + playerHeight > 268)
then 
player.x = oldx
player.y = oldy
end
end
 
function collisionCheck(object1,object)
if (player.x + playerWidth > object.x) and (player.x < object.x + playerWidth)
and (player.y + playerHeight > object.y) and ( player.y < object.y + playerHeight) then
return -1
 
else
return 0
end
end
 
function collisionBlockCheck(object1,player)
if (object1.x + object1.width > player.x) and (object1.x < player.x + player.width)
and (object1.y + object1.height > player.y) and (object1.y < player.y + player.height) then
player.h = -(object1.h)
player.k = -(object1.k)
player.k = -(player.k)
player.h = -(player.h)
end
end
 
counter = Timer.new()
counter:start()
time = 0
result = true
while (result == true) do
currentTime = counter:time()
oldx = player.x
oldy = player.y
screen:clear()
screen:print(10,10, " time of game:"..currentTime,white)
 
moveBlock(Block[1])
moveBlock(Block[2])
moveBlock(Block[3])
movePlayer()
collisionWallsCheck(player)
collisionWallsBlockCheck(Block[1])
collisionWallsBlockCheck(Block[2])
collisionWallsBlockCheck(Block[3])
 
if (collisionCheck(player,Block[1]) <= -1) or
(collisionCheck(player,Block[2]) <= -1) or 
(collisionCheck(player,Block[3]) <= -1) then
result = false
end
collisionBlockCheck(Block[1],Block[2])
collisionBlockCheck(Block[1],Block[3])
collisionBlockCheck(Block[2],Block[3])
 
screen:blit(player.x,player.y,player1)
for a = 1,3 do
screen:blit(Block[a].x,Block[a].y,block)
end
screen.waitVblankStart()
screen.flip()
end
 
counter:stop()
while true do
screen:clear()
screen:print(200,100," Score:"..currentTime,white)
screen.waitVblankStart()
screen.flip()
pad = Controls.read()
if pad:circle() then break end
end

Imagen de cristianrap

Eso si...

Probando el juego me e dado cuenta de que cuando los bloques que tienes que esquivar se chocan, se unen y ya no se separan.

Imagen de Guitripio

GRACIAS....!!!!!

ahora checo mi codigo y lo comparo con el tuyo,para ver donde exactamente, estaba mi error...

Saludos y de nuevo GRACIAS.........!!!!!!


===========

2 Pasos a la libertad.

sudo apt-get remove Windows
sudo apt-get install Gnu/Linux

==================================================

Linux se crea y no se destruye, solo se transforma.

Imagen de Chimecho

yo ya te he dicho mas abajo

yo ya te he dicho mas abajo donde exactamente esta el error...
Saludos!

Imagen de cristianrap

Recuerda..

Recuerda el bug que se produce cuando chocan los cuadrados verdes.

 

Saludos.

Imagen de Guitripio

Si....

ya lo vi.... supuestamente no deberia hacer eso..!!!

los cuadros deben de rebotar entre si..!!!!!

a que se debera ese bug..?      --  si claramente el codigo dice que deben de rebotar..!!


===========

2 Pasos a la libertad.

sudo apt-get remove Windows
sudo apt-get install Gnu/Linux

==================================================

Linux se crea y no se destruye, solo se transforma.

Imagen de Guitripio

bueno aqui esta el codigo

bueno aqui esta el codigo completo....!!!

 

blue = Color.new(0,0,255)
green = Color.new(0,255,0)
white = Color.new(255,255,255)
 
player = Image.createEmpty(32,32)
player:clear(blue)
block = Image.createEmpty(32,32)
block:clear(green)
player = {x = 30, y = 100}
playerHeight = 32
playerWidth = 32
 
Block = {}
Block[1] = {x = 100,y = 80, height = block:height(), width = block:width(),k = 3,h = -2}
Block[2] = {x = 300,y = 30, height = block:height(), width = block:width(),k = -1,h = -2}
Block[3] = {x = 200,y = 58, height = block:height(), width = block:width(),k =-2,h = 2}
 
function movePlayer()
pad = Controls.read()
if pad:left() then
player.x = player.x-2
end
if pad:right() then
player.x = player.x+2
end
if pad:up() then
player.y = player.y-2
end
if pad:down() then
player.y = player.y+2
end
end
 
function moveBlock(bloc)
bloc.x = bloc.x + bloc.k
bloc.y = bloc.y + bloc.h
end
 
function collisionWallsBlockCheck(obj)
if (obj.x + playerWidth<35) or 
   (obj.x + playerWidth>475) then 
obj.k = -(obj.k)
end
 
if (obj.y + playerHeight<35) or 
   (obj.y + playerHeight>268) then 
   obj.h = -(obj.h)
end
end
 
function collisionWallsCheck(obj)
if(obj.x + playerWidth < 35) or
   (obj.x + playerWidth > 475) or 
   (obj.y + playerHeight < 35) or 
   (obj.y + playerHeight > 268)
then 
obj.x = oldx
obj.y = oldy
end
end
 
function collisionCheck(object1,object)
if (object1.x + playerWidth > object.x) and (player.x < object.x + playerWidth)
and (object1.y + playerHeight > object.y) and ( player.y < object.y + playerHeight) then
return -1
 
else
return 0
end
end
 
function collisionBlockCheck(object1,object2)
if (object1.x + object1.width > object2.x) and (object1.x < object2.x + object2.width)
and (object1.y + object1.height > object2.y) and (object1.y < object2.y + object2.height) then
object.h = -(object1.h)
object.k = -(object1.k)
object2.k = -(object2.k)
object2.h = -(object2.h)
end
end
 
counter = Timer.new()
counter:start()
time = 0
result = true
while (result == true) do
currentTime = counter:time()
oldx = player.x
oldy = player.y
screen:clear()
screen:print(10,10, " time of game:"..currentTime,white)
 
moveBlock(Block[1])
moveBlock(Block[2])
moveBlock(Block[3])
movePlayer()
collisionWallsCheck(Player)
collisionWallsBlockCheck(Block[1])
collisionWallsBlockCheck(Block[2])
collisionWallsBlockCheck(Block[3])
 
if (collisionCheck(Player,Block[1]) <= -1) or
(collisionCheck(Player,Block[2]) <= -1) or 
(collisionCheck(Player,Block[3]) <= -1) then
result = false
end
collisionBlockCheck(Block[1],Block[2])
collisionBlockCheck(Block[1],Block[3])
collisionBlockCheck(Block[2],Block[3])
 
screen:blit(Player.x,Player.y,player)
for a = 1,3 do
screen:blit(Block[a].x,Block[a].y,block)
end
screen.waitVblankStart()
screen.flip()
end
 
counter:stop()
while true do
screen:clear()
screen:print(200,100," Score:"..currentTime,white)
screen.waitVblankStart()
screen.flip()
pad = Controls.read()
if pad:circle() then break end
end

espero y me puedan ayudar..!!!

saludos y Gracias..!!!!


===========

2 Pasos a la libertad.

sudo apt-get remove Windows
sudo apt-get install Gnu/Linux

==================================================

Linux se crea y no se destruye, solo se transforma.

Imagen de Chimecho

listo, tu error es...

has declarado la imagen "player" y el arreglo "player" ves?, es el mismo nombre, sin embargo luego haces referencia a la imagen como "player" y al arreglo "Player".
Te recomendaria que al dar nombre a las variables, le cambies algo mas, no solo una letra de minus a mayus, que se yo, a la imagen ponle "player_img" y al arreglo "player".
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 -_-

Imagen de unai.

¿playerWidth es una variable

¿playerWidth es una variable a la que le has asignado image:width()? Porque si no es una variable ahí está lo nulo. Y lo mismo pasa con height.

Prueba a poner image:width() y image:height() sustituyendo image por la variable de imagen que tu quieras.



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

SceneBET y PSP Euskaraz 2... ¿Pronto?

Imagen de Chimecho

El error real no está ahí...

Lua te marca un error ahí porque al realizar la comprobación de obj.x está tomando un argumento que tu le pasas, así que el error real está luego, en el algún lugar donde llames a la función.

Por eso todos te dirán que se necesita más del script, caso contrario, es imposible ayudarte.

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

Imagen de cristianrap

codigo entero

si pusieras el codigo completo seria mas facil ayudarte :D

Imagen de moikop

Si tu LP dice que es un valor

Si tu LP dice que es un valor nulo, es porque es un valor nulo. Analiza bien esas variables...

Imagen de Guitripio

Ya lo hice...!!!

pero que ves de raro o mal en mi codigo....?

no se ,tal ves he puesto un simbolo,que no existe o algo..!!!!

ya me duele la cabezaaaaaa  :(

saludos


===========

2 Pasos a la libertad.

sudo apt-get remove Windows
sudo apt-get install Gnu/Linux

==================================================

Linux se crea y no se destruye, solo se transforma.

Imagen de moikop

Dos opciones

o obj.x es nula o playerWidth es nula. Lo más probable es que obj.x sea nula ya que obj es una variable de la función. y .x es de una tabla. Lo que puede generar un error...


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

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.