Ooops
January 26, 2021, 06:20:46 AM

Author Topic: [bmx] collision by Jesse [ 1+ years ago ]  (Read 424 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bmx] collision by Jesse [ 1+ years ago ]
« on: June 29, 2017, 12:28:42 AM »
Title : collision
Author : Jesse
Posted : 1+ years ago

Description : a way to checks if a point is inside the rectangular area of a rotated image.  
with a little bit of modifications, it can work with any size  rotated rectangle.


Code :
Code: BlitzMax
  1. SuperStrict
  2. Type Tentity
  3.  
  4.         Field x:Float
  5.         Field y:Float
  6.         Field image:TImage
  7.         Field angle:Float
  8.         Field x1:Float
  9.         Field y1:Float
  10.         Field x3:Float
  11.         Field y3:Float
  12.        
  13.         Function Create:Tentity(x:Float,y:Float,image:TImage,angle:Float)
  14.                 Local e:Tentity = New Tentity
  15.                 e.x = x
  16.                 e.y = y
  17.                 e.image = image
  18.                 e.angle = angle
  19.                 e.x1:Float = -image.handle_x
  20.                 e.y1:Float = -image.handle_y
  21.                 e.x3:Float =  image.width - image.handle_x
  22.                 e.y3:Float =  image.height - image.handle_y
  23.                 Return e
  24.         End Function
  25.  
  26.         Method collidedpoint:Int(px:Float,py:Float)
  27.                 px = px - x
  28.                 py = py - y
  29.                 Local tx:Float = px*Cos(-angle) - py*Sin(-angle)
  30.                 Local ty:Float = py*Cos(-angle) + px*Sin(-angle)  
  31.                 If tx > x1  
  32.                         If ty >y1
  33.                                 If tx < x3
  34.                                         If ty < y3
  35.                                                 Return True
  36.                                         EndIf
  37.                                 EndIf
  38.                         EndIf
  39.                 EndIf
  40.                 Return False
  41.         End Method
  42.                
  43.         Method display()
  44.                 SetRotation angle
  45.                 DrawImage image,x,y
  46.                 SetRotation 0
  47.                 DrawOval x-3,y-3,6,6
  48.         End Method
  49.  
  50. End Type
  51.  
  52. Local img:TImage = CreateImage(64,64)
  53. Local pixls:Int Ptr = Int Ptr(LockImage(img).pixels)
  54. For Local i:Int = 0 Until img.width*img.height
  55.         pixls[Rand(img.width*img.height-1)] = $ff00ff00
  56. Next
  57.  
  58. SetImageHandle img,32,-32
  59.  
  60. Graphics 800,600
  61. Local entity:tentity = Tentity.Create(300,300,img,45)
  62.  
  63. Local angle:Float  = 0
  64.  
  65. Repeat
  66.         Cls()
  67.         entity.angle = angle
  68.         If entity.collidedpoint(MouseX(),MouseY())
  69.                 DrawText "collided",400,300
  70.         EndIf
  71.         entity.display()
  72.         angle :-.5
  73.         Flip()
  74. Until KeyDown(key_escape)


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal