forums.ps2dev.org Forum Index forums.ps2dev.org
Homebrew PS2, PSP & PS3 Development Discussions
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Best way for collision pt. 2

 
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PSP Lua Player Development
View previous topic :: View next topic  
Author Message
DiabloTerrorGF



Joined: 15 Jul 2005
Posts: 64

PostPosted: Mon Apr 17, 2006 4:25 am    Post subject: Best way for collision pt. 2 Reply with quote

Quote:
Code:

function bulletCollide(Obj1X, Obj1Y, Obj1MX, Obj1MY, Obj2X, Obj2Y, Obj2MX, Obj2MY)
Obj1MidX=Obj1X+(Obj1MX/2)
Obj1MidY=Obj1Y+(Obj1MY/2)
Obj2MaxX=Obj2X+Obj2MX
Obj2MaxY=Obj2Y+Obj2MY
if Obj1MidX<Obj2MaxX+1 and Obj1MidX>Obj2X-1 and Obj1MidY<Obj2MaxY+1 and Obj1MidY>Obj2Y-1 then
return true
end
return false
end


This code tells you if the center of the first object is anywhere inside the bounds of the second object(return true).

Obj1X is the starting X, Obj1XM is the is the width of the rectangle/square and so on for the others.


Ok, thats my old code, but does anyone have any better code for distuingishing hit detection between two rectangles?
Back to top
View user's profile Send private message
Jim



Joined: 02 Jul 2005
Posts: 487
Location: Sydney

PostPosted: Mon Apr 17, 2006 3:06 pm    Post subject: Reply with quote

At the very least you are going to need 4 comparisons. The only way to go faster is to have the left and right sides of the box precomputed, but that will surely cost you somewhere else. eg in the movement code.

Jim
_________________
http://www.dbfinteractive.com
Back to top
View user's profile Send private message Visit poster's website
DiabloTerrorGF



Joined: 15 Jul 2005
Posts: 64

PostPosted: Mon Apr 17, 2006 3:44 pm    Post subject: Reply with quote

Code:
int sprite_colide(SDL_Rect *rc, SDL_Rect *rc2) {

   int i,z;
   for( i = rc->x; i < rc->x+rc->w; i++) {
      for(z = rc->y; z < rc->y+rc->h; z++) {
         if(i >= rc2->x && i <= rc2->x+rc2->w && z >= rc2->y && z <= rc2->y+rc2->h) return 1;
      }

   }

   return 0;

}


This is taken from that Road Kill game for PSP. It's in C. I can't really understand it though. I know what everything does but I can never read that other people make really.

rc->w is the width of the image in pixels, rc->x would be the x location of the first pixel and so on.

Would that code be suffucient if converted to LUA? I can convert it myself, but it may take awhile, but if someone can read that code and make a LUA version of it for me, I'd be most greatful as I hate working with LUA for loops(Having no brackets and such give me a headache...)
Back to top
View user's profile Send private message
Jim



Joined: 02 Jul 2005
Posts: 487
Location: Sydney

PostPosted: Mon Apr 17, 2006 3:48 pm    Post subject: Reply with quote

Stick with your own code. That check is very silly - it checks if any point in the source rectangle is inside the destination rectangle which isn't necessary when really you only need to check the corners. It's much slower than yours.

Jim
_________________
http://www.dbfinteractive.com
Back to top
View user's profile Send private message Visit poster's website
imhotep



Joined: 13 Dec 2005
Posts: 41

PostPosted: Wed Apr 26, 2006 1:15 am    Post subject: Reply with quote

Code:
--attack area

--      x1---x2   
--      |     |   player   
--      |  X  |   X=centre
--      |     |   --> collision when centre is hit by centre of enemy
--      y1---y2   

collision=1

x1=xpos
x2=xpos+playerWidth
y1=ypos
y2=ypos+playerHeight

e_x1=enemyX
e_x2=enemyX+enemyWidth
e_y1=enemyY
e_y2=enemyY+enemyHeight

x_centre=xpos+( (x2-x1)/2 )
y_centre=ypos+( (y2-y1)/2 )

e_x_centre=enemyX+( (e_x2-e_x1)/2 )
e_y_centre=enemyY+( (e_y2-e_y1)/2 )


   if math.abs(e_x_centre-x_centre)>=enemyWidth/2      then collision=0
   elseif math.abs(e_y_centre-y_centre)>=enemyHeight/2   then collision=0
   
   end


worked for me... :)
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    forums.ps2dev.org Forum Index -> PSP Lua Player Development All times are GMT + 10 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group