SpriteCollisionAccuracy
SpriteCollisionAccuracy Level#
 
Parameters:

    Level# = The Level of accuracy sprite collisins should use
Returns: NONE
 

      SpriteCollisionAccuracy sets the level of accuracy the sprite collision engine should use during Pixel Perfect collision calculations.

      SpriteCollisionAccuracy defaults to 1.0 which represents a 1 to 1 comparison (100% in other words). Generally speaking that's overkill. %50 -> %75 is good trade off. Often you can go even lower and barely notice it.




FACTS:


      * Collision Accuracy affects sprite collisions that use Pixel Perfect collision mode. See SpriteCollisionMode

      * Note: Since sprites can be rotated and scaled, you'll possibly loose some pixel accuracy through linear interpolation. So if your game requires a lot of scaling down for example, then you might want to bump up the collision accuracy up in those cases. It's always going to be trade off between speed and accuracy though. So experiment and see what works best in your game.






Mini Tutorial:


      This example builds some images, setups some sprites and


  
  MakeBitmapFont 1,$ffffff
  
; ====================================
; Part 1 - Create two coloured images
; ====================================
  
  Cls RGB(0,0,0)
  For lp=0 To 20
     x=Rnd(128)
     y=Rnd(128)
     Select Rnd(1)
         Case 0
             BoxC x,y,x+2,y+2,true,RndRGB()
         Case 1
             CircleC x,y,10,true,RndRGB()
     EndSelect
     
  Next
  GetImage 1,0,0,128,128
  PrepareFXImage 1
  
  Cls RGB(0,155,100)
  CircleC 0,32,16,true,RGB(0,0,0)
  
  GetImage 2,0,0,64,64
  PrepareFXImage 2
  
  
; =============================
; Part 2- Create some sprites
; =============================
  
; Create Sprite 1, and assign it image 1
  CreateSprite 1
  SpriteImage 1,1
  CenterSpriteHandle 1
  
; Set Sprites Drawing mode to rotated
  SpriteDrawMode 1,2
  
; Rotate this sprite 45 degree
  RotateSprite 1,45
  
; Enable Collision for Sprite #1
  SpriteCollision 1,on
; Set Sprite #1 to collision Class %0001
  SpriteCollisionClass 1,%0001
  
; Set Sprite #1 to collision mode to 6 (Pixel perfect)
  SpriteCollisionMode 1,6
  
  
  
; =====================================================
; Create a bunch of sprites to check collision against
; =====================================================
  
  For Sprites=2 To 50
     CreateSprite Sprites
     SpriteImage Sprites,2
     CenterSpriteHandle Sprites
     x=Rnd(GetScreenWidth()-32)
     y=Rnd(GetScreenHeight()-32)
     PositionSprite sprites,x,y
     
   ; Set the sprites draw mode/rotation and scale
     SpriteDrawMode Sprites,2
     RotateSprite Sprites,Rnd(360)
     ScaleSprite Sprites,0.5+(Rnd(100)/100.0)
     
   ; Enable Collision for this sprite
     SpriteCollision Sprites,on
     
   ; Set sprite to Collision Class %0010
     SpriteCollisionClass Sprites,%0010
     
   ; Set sprite to Collision mode 6 (pixel perfect)
     SpriteCollisionMode Sprites,6
     
  Next
  
  
  
; =============================
; Part 3- The Main Loop
; =============================
  
; Start a DO/Loop
  Do
   ; Clear the screen
     Cls RGB(80,80,80)
     
     
   ; turn all the sprites
     For Sprites=1 To 50
        SpriteDrawMode Sprites,2
        If sprites>1 Then TurnSprite Sprites,0.15
        SpriteCollisionDebug Sprites,Debugflag
     Next
     
     
   ; Position the Sprite 1 at the mouses position
     PositionSprite 1,MouseX(),MouseY()
     
     
   ; Check if sprite #1 hit another sprite
   ; of this sprite class
     ThisSprite=SpriteHit(1,GetFirstSprite(),%0010)
     
   ; If there was impact, then we loop through and
   ; find any other sprites we might have also hit
     While ThisSprite>0
        
      ; set sprite to rotated + COlour Flash mode
        SpriteDrawMode ThisSprite,2+4096
        
      ; Check if this sprite hit another sprite ?
     NextSprite=GetNextSprite(ThisSprite)
     
     
     ThisSprite=SpriteHit(1,NextSprite,%0010)
  EndWhile
  
  
  If SpaceKey() Then DebugFlag=1-debugFlag
  
; Draw All of the sprites
  DrawAllSprites
  
  
  
; Display a message
  SetCursor 0,0
  Print "Checking For Pixel Perfect sprite Collisions"
  Print "Collision Accuracy:"+Str$(GetSpriteCollisionAccuracy())
  
  
  If LeftKey() And GetSpriteCollisionAccuracy()>0.1
     SpriteCollisionAccuracy  GetSpriteCollisionAccuracy()-0.1
     FlushKeys
  EndIf
  
  If RightKey() And GetSpriteCollisionAccuracy()<10
     SpriteCollisionAccuracy  GetSpriteCollisionAccuracy()+0.1
     FlushKeys
  EndIf
  
; Draw the screen
  Sync
  
; Loop back to the DO statement
  Loop
  
  


 
Related Info: GetSpriteCollisionAccuracy | SpriteCollision | SpriteCollisionMode :
 


(c) Copyright 2002 - 2024 - Kevin Picone - PlayBASIC.com