Anuncios Google

Ayuda Colisiones LUA (Doi Desde 300 Bitos)

Hola Me Podrian Ayudar Porque La Verdad No Se Cual Sera El Error... El Codigo Funciona Perfecto... Pero No Logro Completar La Colision Porfavor Si Alguien Me Ayuda...

 

bloque1 = Image.load ("RUTA DE IMAGEN")
 
ferrari = Image.load ("RUTA DE IMAGEN")
 
--Coordenadas Personaje--
 
auto = {}
auto[1]={x=50,y=198}
sprite=ferrari
 
--Altura, Anchura del personaje--
 
personajeAltura = 61
personajeAnchura = 42
 
-------_______Bloques y colisiones_______-------
 
Bloque = {}
Bloque[1] = { x = 120, y = -200, Altura = 61, Anchura = 42 }
Bloque[2] = { x = 300, y = -400, Altura = 61, Anchura = 42 }
Bloque[3] = { x = 200, y = -570,Altura = 61, Anchura = 42 }
Bloque[4] = { x = 250, y = -620, Altura = 61, Anchura = 42 }
Bloque[5] = { x = 128, y = -770, Altura =61, Anchura = 42 }
Bloque[6] = { x = 216, y = -900, Altura =61, Anchura = 42 }
Bloque[7] = { x = 258, y = -1035, Altura =61, Anchura = 42 }
Bloque[8] = { x = 286, y = -1255, Altura =61, Anchura = 42 }
Bloque[9] = { x = 184, y = -1370, Altura =61, Anchura = 42 }
Bloque[10] = { x = 135, y = -1460, Altura =61, Anchura = 42 }
Bloque[11] = { x = 290, y = -1460, Altura =61, Anchura = 42 }
Bloque[12] = { x = 142, y = -1690, Altura =61, Anchura = 42 }
Bloque[13] = { x = 284, y= -1760, Altura =61, Anchura = 42 }
Bloque[14] = { x = 185, y = -1841, Altura =61, Anchura = 42 }
Bloque[15] = { x = 125, y = -2141, Altura =61, Anchura = 42 }
Bloque[16] = { x = 300, y = -2275, Altura =61, Anchura = 42 }
Bloque[17] = { x = 270, y = -2455, Altura =61, Anchura = 42 }
Bloque[18] = { x = 129, y = -2643, Altura =61, Anchura = 42 }
Bloque[19] = { x = 240, y = -2672, Altura =61, Anchura = 42 }
Bloque[20] = { x = 180, y = -2776, Altura =61, Anchura = 42 }
Bloque[21] = { x = 300, y = -2942, Altura =61, Anchura = 42 }
 
 
-------_______Bloque colision AUTO_______-------
 
 
-------_______Comprobacion De Colision_______-------
 
 
function comprobarColision(object)
   if (auto[1].x + personajeAnchura > object.x) and 
(auto[1].x < object.x + object.Anchura) and    
(auto[1].y + personajeAltura > object.y) and 
(auto[1].y < object.y + object.Altura) then
      auto[1].x = oldx
      auto[1].y = oldy
   end
end
 
 
 
--Bucle Principal
while true do
oldx = auto[1].x
oldy = auto[1].y
 
screen:clear()
 
 
-------_______Comprobacion De Colision_______-------
 
comprobarColision(Bloque[1])
comprobarColision(Bloque[2])
comprobarColision(Bloque[3])
comprobarColision(Bloque[4])
comprobarColision(Bloque[5])
comprobarColision(Bloque[6])
comprobarColision(Bloque[7])
comprobarColision(Bloque[8])
comprobarColision(Bloque[9])
comprobarColision(Bloque[10])
comprobarColision(Bloque[11])
comprobarColision(Bloque[12])
comprobarColision(Bloque[13])
comprobarColision(Bloque[14])
comprobarColision(Bloque[15])
comprobarColision(Bloque[16])
comprobarColision(Bloque[17])
comprobarColision(Bloque[18])
comprobarColision(Bloque[19])
comprobarColision(Bloque[20])
comprobarColision(Bloque[21])
 
pad = Controls.read()
 
for a = 1,21 do
screen:blit(Bloque[a].x,Bloque[a].y,bloque1)
end
 
screen:blit(auto[1].x,auto[1].y,sprite)
 
oldpad = pad
screen.waitVblankStart()
screen.flip()
end 

esoso Son Los Codigos De La Colision... No Puse Todo el codigo Del Juego (Por Ej. El De Avanzar O La Escena) Porque Es Bastante Pero Si Es Nescesario Poner Todo El Codigo

Solo Diganme... Espero Que Me Ayuden...

Asi Al Que Me Logre Ayudar Dare Desde 300 Bitos... Saludosss!!!!

desde 300 Bitos Al Que Ayude :D...

Hasta 700...


Editado: Movido a Programación, postear en el lugar incorrecto incumple las Normas de la Comunidad, antes de volver a postear por favor revíselas.| Rober Galarga


PhAnThom...

COBHC...



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 sting18

ok si tu coche no da reversa

ok si tu coche no da reversa solo va para adelante en tu caso hacia arriba lo que quieres es una colision sencilla puedes hacer esto

function choke(object)
   if (auto[1].x  > object.x) and
(auto[1].x < object.x + object.Anchura) and 
(auto[1].y < object.y + object.Altura) then
      auto[1].y = object.y + objet.Altura   end
end

supongamos que tu coche mide 50x50

autoAltura = 50

autoAnchura = 50

con eso ya tienes la colicion a tu objeto hacia arriba solo agrega el objeto he imprime las medidas exactas de anchura y altura del objeto y listo saludos ;)


Imagen de Chimecho

mmm...

Prueba con:

function comprobarColision(object)
   if (auto[1].x + personajeAnchura > object.x) or 
(auto[1].x < object.x + object.Anchura) or 
(auto[1].y + personajeAltura > object.y) or 
(auto[1].y < object.y + object.Altura) then
      auto[1].x = oldx
      auto[1].y = oldy
   end
end

Mira que he cambiado tus "and" por "or", recuerda que "and" es "y" y "or", es "o", entonces, no creo que la colision sea cuando se cumplan todas las condiciones que sería que el auto está dentro del bloque :S, en cambio con or, la colisión se cumplirá cuando se cumpla una de ellas, es decir, cuando un lado del auto, se tope con un lado del bloque en cuestión...

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 DeViaNTe

no te colisionará nunca.

No te colisionará nunca debido a tus tamaños. Los tamaños son iguales y en esta detección de colisión usas que el coche ha de ser más pequeño que el objeto, y pasar por el pleno centro. Es decir, la única colisión que detectaría esta función sería esta:

 |____| objeto
   ___
   |  |   coche.

No se si se entiende bien xD.

Prueba esto:

function inrect(xobjeto,yobjeto,x,y,w,h)
 if ( xobjeto >= x ) and (yobjeto >= y) and ( xobjeto <= x+w ) and ( yobjeto <= y+h ) then return true else return false end
end

Esa funcion nos dice si los primeros x,y estan dentro del rectangulo, y ara la funcion detectar colisiones...

function comprobarColision(object)   -- ajustar accesos directos a las variables
  local ox, oy, ow, oh = auto[1].x, auto[1].y, personajeAnchura, personajeAltura
  local x,y,w,h = object.x, object.y, object.Anchura, object.Altura
 
-- comprobar 4 puntos básicos (diagonales)
  if inrect(ox,oy,x,y,w,h) or inrect(ox+ow,oy,x,y,w,h) or inrect(ox,oy+oh,x,y,w,h) or inrect(ox+ow,oy+oh,x,y,w,h) then
      auto[1].x = oldx;
      auto[1].y = oldy;
  end
 
  -- comprobar otros 4 puntos para mejorar la colisión...
  if inrect(ox+(ow/2),oy,x,y,w,h) or inrect(ox+(ow/2),oy+oh,xy,w,h) or inrect(ox,oy+(oh/2),x,y,w,h) or inrect(ox+ow,oy+(oh/2),x,y,w,h) then
      auto[1].x = oldx;
      auto[1].y = oldy;
  end   
end

 


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

Imagen de PhAnThOm

Pero au asi no hay

Pero au asi no hay colision... :S... en todo caso si el objeto (auto) es del mismo tamaño que la colision estaria bien... porque el anchoo i alto del objeto(auto) hacen que quede dentro de un recuadro (osea no quedan espacios libres) la colision deveria efectuarse...

probare varias veces tu codigo de todos modos para ver cual fue mi error...

Gracias y saludoss!!!...

(espero encontrar en tu codigo la respuesta para los bitos ;)...)


PhAnThom...

COBHC...


Prueba esto: function

Prueba esto:

function comprobarColision(object)
if (auto[1].x + personajeAnchura < object.x) and
(auto[1].x > object.x + object.Anchura) and
(auto[1].y + personajeAltura < object.y) and
(auto[1].y > object.y + object.Altura) then
auto[1].x = oldx
auto[1].y = oldy
end
end

 

joder que mania con el luahm

joder que mania con el luahm de los huevos, pasaros a luadev...

oldx = auto[1].x
oldy = auto[1].y

eso no deberia ir a bajo del todo?

y que es lo que pasa exactamente, entra dentro del bloque?

 

Imagen de PhAnThOm

jajaja.... Amigo El Orden Da

jajaja.... Amigo El Orden Da lo mismo... con que este bajo el While true do... esta bien.

 y la colision no se completa... o sea, traspasa el bloque


PhAnThom...

COBHC...


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.