In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Changes

Jump to navigation Jump to search
2,381 bytes added ,  20:18, 28 August 2008
Line 1,167: Line 1,167:  
== Collision Detection ==
 
== Collision Detection ==
    +
Description: Shows how to test for collision between various objects, does not contain an example for node based collision detection (yet).
 +
 +
<source lang="cpp">#include <stdio.h>
 +
#include <stdlib.h>
 +
#include <gccore.h>
 +
#include <wiiuse/wpad.h>
 +
#include <fat.h>
 +
 +
#include <wiisprite.h>
 +
using namespace wsp;
 +
 +
GameWindow gwd; // Initializes and renders our scene.
 +
 +
Sprite sprite; // The drawable object we can modify.
 +
Sprite sprite2; // another sprite to check collision against.
 +
 +
Image image; // Holds our image/texture from the SD Card.
 +
Image image2; // hold the other image/tecture from SD card.
 +
 +
Rectangle rect; // rectangle object as an example.
 +
Quad quad; //quad object for rect.
 +
 +
struct player {
 +
     
 +
      u32 xpos, ypos
 +
     
 +
} Player;
 +
 +
void checkCollision(u32 oldX, u32 oldY);
 +
 +
int main(int argc, char **argv) {
 +
   
 +
fatInitDefault();
 +
 +
gwd.InitVideo();
 +
 +
LayerManager manager(3);
 +
 +
if(image.LoadImage("libwiisprite.png") != IMG_LOAD_ERROR_NONE)exit(0);
 +
if(image.LoadImage("libwiisprite2.png") != IMG_LOAD_ERROR_NONE)exit(0);
 +
 +
sprite.SetImage(&image);
 +
sprite.SetPosition(Player.xpos, Player.ypos);
 +
 +
sprite2.SetImage(&image2);
 +
sprite2.SetPosition(200,200);
 +
 +
manager.Append(&sprite);
 +
manager.Append(&Rectangle);
 +
 +
rect.width = 20; rect.height = 20;
 +
rect.x = 50; rect.y = 50;
 +
 +
quad.SetRectangle(&rect);
 +
 +
WPAD_Init();
 +
WPAD_SetDataFormat(WPAD_CHAN_0, WPAD_FMT_BTNS_ACC_IR);
 +
 +
while(1) {
 +
        u32 oldX = Player.xpos, oldY = Player.ypos;
 +
       
 +
WPAD_ScanPads();
 +
u32 pressed = WPAD_ButtonsHeld(WPAD_CHAN_0);
 +
 +
if(pressed & WPAD_BUTTON_UP)
 +
            Player.ypos -= 1;
 +
 
 +
        if(pressed & WPAD_BUTTON_DOWN)
 +
            Player.ypos += 1;
 +
           
 +
        if(pressed & WPAD_BUTTON_LEFT)
 +
            Player.xpos -= 1;
 +
           
 +
        if(pressed & WPAD_BUTTON_RIGHT)
 +
            Player.xpos += 1;
 +
           
 +
        sprite.SetPosition(Player.xpos, Player.ypos);
 +
       
 +
        checkCollision();
 +
       
 +
        sprite.SetPosition(Player.xpos, Player.ypos);
 +
 +
manager.Draw(0, 0);
 +
gwd.Flush();
 +
}
 +
 +
manager.Draw(0, 0);
 +
gwd.Flush();
 +
 +
return 0;
 +
}
 +
 +
void checkCollision(u32 oldX, u32 oldY)
 +
{
 +
    if (sprite.CollidesWith(&sprite2)) {
 +
          Player.x = oldX;
 +
          Player.y = oldY;
 +
    }
 +
   
 +
    if (sprite.CollidesWith(&quad)) {
 +
          Player.x = oldX;
 +
          Player.y = oldY;
 +
    }
 +
 +
   
 +
}</source>
    
== EXAMPLE PROGRAMS  ==
 
== EXAMPLE PROGRAMS  ==
48

edits

Navigation menu