Hola compañeros, pues justo hoy he leído en Emuzone, un compañero que explicaba el tema de los funcionamientos internos en las collisiones, supongo que sería para gente que desarrolla para le tema de 8 bits, aunque es totalmente utilizable en cualquier lenguaje, ya que explica, a parte de muy bien, el tema de las mates.
Bien he hecho esté code Snipet, porque Glbasic, no tiene colision en circulo, y creo que a parte de ser más rápida que la collision por pixel, y debido que la colision por caja, pues eso... solo es una caja he echo está función.
Supongo que el rendimiento será más optimo que el SPRCOLL, no se..., pero creo que puede ser útil por ejemplo para el tema de las naves que estoy haciendo, creo que puede estar bien.
Un saludo,
Iván// --------------------------------- //
// Project: circle_Box_Coll
// Start: Sunday, July 31, 2011
// IDE Version: 10.057
// SETCURRENTDIR("Media") // go to media files
GLOBAL distancia,distancia1,distancia2,distancia3,distancia_Final
GLOBAL x2=300
GLOBAL x1=500
GLOBAL y2=300
GLOBAL y1=200
GLOBAL radio=50
GLOBAL mx,my,b1,b2
GLOBAL preview=TRUE
GLOBAL move_in_X=0
WHILE TRUE
INC move_in_X,1
MOUSESTATE mx,my,b1,b2
func_coll_Cirlce(radio,preview)
SHOWSCREEN
WEND
FUNCTION func_coll_Cirlce:radio,preview
//VARIABLES FOR CALCULE THE POSITIONS OF EVERY POINT
x1=300+(COS(move_in_X)*40)
y1=200+(SIN(move_in_X)*40)
distancia1=POW((x2-x1),2)
distancia2=POW((y1-y2),2)
distancia3=distancia1+distancia2
distancia_Final=SQR(distancia3)
//REALLY THIS IS THE MATHEMATICAL FORMULE
IF distancia_Final-radio<radio THEN PRINT "Collide",0,0 //PRINT COLLIDE
// OR WHAT DO YOU WANT MAKE
//TEST THE COLLIDE, ONLY DRAW A GREEN CIRCLE ON EVERY POSITION
//OF EACH PONT IN TEH SCREEN
IF preview=TRUE
//testing
FOR cir1=0 TO 360
SETPIXEL x1+(COS(cir1)*radio),y1+(SIN(cir1)*radio),RGB(0,255,0)
SETPIXEL x2+(COS(cir1)*radio),y2+(SIN(cir1)*radio),RGB(255,0,0)
NEXT
ENDIF
//ONLY DRAW A PIXEL (USE SPRITE OR XOBJ[USING THE 2D TO 3D CONVERSION])
MOUSESTATE mx,my,b1,b2
x2=mx
y2=my
SETPIXEL x1,y1,RGB(255,0,0)
SETPIXEL x2,y2,RGB(0,0,255)
ENDFUNCTION
PS: No se si el código estará muy bien elaborado....
dx = x1-x2
dy = y1-y2
dist = SQR(dx*dx + dy*dy)
dist * dist = SQR(dx*dx + dy*dy) * SQR(dx*dx + dy*dy)
->
dist * dist = dx*dx+dy*dy
IF dx*dx+dy*dy < (R1+R2) * (R1+R2) // muchas mas rapido - (no hablar Espaniol :( - bailar la bamba! )
Thanks Kitty :-* :-* :-* much better now. :nw: :nw: :nw:
:offtopic:
QuoteIF dx*dx+dy*dy < (R1+R2) * (R1+R2) // muchas mas rapido - (no hablar Espaniol :( - bailar la bamba! )
Well in Spain "la Bamba" not it´s a popular dance, in Spain the topic always it´s "Flamenco, Sevillana and Los Toros", I don´t undertand never this topic becuase this it´s principally only in the South of Spain.
Todo mis respetos a MSX y el otro compañero de Sevilla. <3 <3 :booze: :booze: :-* :-*
¡Que mamoncete! :nana: =D :whip:
JAjAJa!!!, no MSX, pero es verdad tio... pero vamos yo soy medio Andaluz , no te pienses cosas malas.
<3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3
:booze: :booze: :booze: :puke: :puke: :puke: :shit: :shit: :shit: :shit: :help: :help: :help: