A very impressive direct-to-screen sprites demonstration by Hanski using new graphics functionality developed by him
Dependencies: PokittoLib
Diff: main.cpp
- Revision:
- 0:8652235f92b9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Dec 29 06:06:10 2017 +0000 @@ -0,0 +1,104 @@ +#include "Pokitto.h" +#include "gfxdata.h" +Pokitto::Core mygame; + +// MySprite +struct MySprite { + int16_t x,y,w,h,vx,vy; +}; + +const int16_t speed = 4; +const uint8_t spriteCount = 4; +const uint8_t spriteW = 32, spriteH = 32; +MySprite mySprites[spriteCount]; + +// Palettes +const uint16_t *palettes[spriteCount] = { + sprite1_pal, + sprite2_pal, + sprite3_pal, + sprite4_pal, +}; + +int main () { + + // Init + int16_t startX = 0, startY = 0; + for(int i=0; i < spriteCount; i++) { + + // Set my sprite data. + mySprites[i].x = startX + i*21; + mySprites[i].y = startY + i*21; + mySprites[i].w = spriteW; mySprites[i].h = spriteH; + mySprites[i].vx = speed; mySprites[i].vy = speed; + + // Set sprite + mygame.display.setSpriteBitmap(i, sprite_bmp, palettes[i], mySprites[i].x, mySprites[i].y); + } + + // Do not clear the background! + mygame.display.persistence = 1; + + // Set the palette for the screen buffer + mygame.display.palette[0] = background_pal[0]; + mygame.display.palette[1] = background_pal[1]; + mygame.display.palette[2] = background_pal[2]; + mygame.display.palette[3] = background_pal[3]; + + mygame.begin(); + + mygame.setFrameRate(100); // No limits! + + // Game loop + uint8_t isFirstRounds = 2; + while(mygame.isRunning()) { + + // Draw background + if(isFirstRounds > 0) { + if(mygame.update(false)) { // Update the screen buffer + // Draw the background only in the first rounds. + mygame.display.drawBitmap(0, 0, background_bmp); + isFirstRounds--; + } + } + // Draw mySprites + else { + if (mygame.update(true)) { // Do not update the screen buffer + // Move mySprites + for (int i=0; i < spriteCount; i++) { + + int16_t x = mySprites[i].x, y = mySprites[i].y; + int16_t w = mySprites[i].w, h = mySprites[i].h; + + // Advance x and y. + x += mySprites[i].vx; y += mySprites[i].vy; + + // Bounce from hidden edges + if (x < -spriteW) { + x = -spriteW; + mySprites[i].vx = speed; + } + else if (x >= mygame.display.getWidth() - w + spriteW) { + x = mygame.display.getWidth() - 1 - w + spriteW; + mySprites[i].vx = -speed; + } + if (y < -spriteH) { + y = -spriteH; + mySprites[i].vy = speed; + } + else if (y >= mygame.display.getHeight() - h + spriteH) { + y = mygame.display.getHeight() - 1 - h + spriteH; + mySprites[i].vy = -speed; + } + + // Set sprite + mygame.display.setSpritePos(i, x, y); + + // + mySprites[i].x = x; mySprites[i].y = y; + } + } + } + } + return 0; +}