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
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 ;)
mmm...
Prueba con:
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 -_-
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 variableslocal 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
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].xoldy = auto[1].y
eso no deberia ir a bajo del todo?
y que es lo que pasa exactamente, entra dentro del bloque?
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...