From 392ef1ef32d3538145b09ebf4d9c8916a7287f86 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Mon, 29 Apr 2013 04:18:20 +1000 Subject: [PATCH] Created SpriteSheet --- client/delta.h | 24 +++++++++++++++++ client/makefile | 4 +-- client/sprite_sheet.cpp | 20 ++++++++++++++ client/sprite_sheet.h | 38 ++++++++++++++++++++++++++ client/unit.cpp | 42 ++++++++++++++++++++++++++++- rsc/graphics/sprites/aniflower.bmp | Bin 0 -> 12342 bytes rsc/graphics/sprites/aniflower.png | Bin 869 -> 0 bytes 7 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 client/delta.h create mode 100644 client/sprite_sheet.cpp create mode 100644 client/sprite_sheet.h create mode 100644 rsc/graphics/sprites/aniflower.bmp delete mode 100644 rsc/graphics/sprites/aniflower.png diff --git a/client/delta.h b/client/delta.h new file mode 100644 index 0000000..5bbfb8d --- /dev/null +++ b/client/delta.h @@ -0,0 +1,24 @@ +#ifndef DELTA_H_ +#define DELTA_H_ + +#include + +class Delta { +public: + Delta() { + time = tick = 0; + } + int Calculate() { + int c = clock(); + time = c - tick; + tick = c; + return time; + } + int GetDelta() const { + return time; + }; +private: + int time, tick; +}; + +#endif diff --git a/client/makefile b/client/makefile index 16b713a..d9d20a1 100644 --- a/client/makefile +++ b/client/makefile @@ -1,7 +1,7 @@ CXXFLAGS+=-std=c++11 -DDEBUG LIB=-lmingw32 -lSDL_net -lSDLmain -lSDL -lwsock32 -liphlpapi OBJ=base_scene.o scene_manager.o main.o -SRC=test_systems.cpp surface_manager.cpp image.cpp +SRC=test_systems.cpp all: debug @@ -15,4 +15,4 @@ clean: -$(RM) *.o *.a *.exe unit: - $(CXX) $(CXXFLAGS) unit.cpp surface_manager.cpp image.cpp -lmingw32 -lSDLmain -lSDL + $(CXX) $(CXXFLAGS) unit.cpp surface_manager.cpp image.cpp sprite_sheet.cpp -lmingw32 -lSDLmain -lSDL diff --git a/client/sprite_sheet.cpp b/client/sprite_sheet.cpp new file mode 100644 index 0000000..b4d85e9 --- /dev/null +++ b/client/sprite_sheet.cpp @@ -0,0 +1,20 @@ +#include "sprite_sheet.h" + +SpriteSheet::SpriteSheet(SDL_Surface* s, int w, int h) + : Image(s, {0, 0, (Uint16)w, (Uint16)h}) +{ + currentFrame = 0; maxFrames = GetSurface()->w / GetClipW(); + currentStrip = 0; maxStrips = GetSurface()->h / GetClipH(); + interval = ticks = 0; +} + +void SpriteSheet::Update(int delta) { + if ((ticks += delta) > interval) { + if (++currentFrame >= maxFrames) { + currentFrame = 0; + } + ticks = 0; + SetClipX(currentFrame * GetClipW()); + SetClipY(currentStrip * GetClipH()); + } +} diff --git a/client/sprite_sheet.h b/client/sprite_sheet.h new file mode 100644 index 0000000..7b89862 --- /dev/null +++ b/client/sprite_sheet.h @@ -0,0 +1,38 @@ +#ifndef SPRITESHEET_H_ +#define SPRITESHEET_H_ + +#include "image.h" + +#include "SDL/SDL.h" + +class SpriteSheet : public Image { +public: + SpriteSheet(SDL_Surface*, int w, int h); + virtual ~SpriteSheet() {} + + void Update(int delta); + + int SetWidth(int i) { return SetClipW(i); }; + int SetHeight(int i) { return SetClipH(i); }; + int SetFrames(int i) { currentFrame = 0; return maxFrames = i; }; + int SetStrips(int i) { currentStrip = 0; return maxStrips = i; }; + + int GetWidth() const { return GetClipW(); } + int GetHeight() const { return GetClipH(); } + int GetFrames() const { return maxFrames; } + int GetStrips() const { return maxStrips; } + + int SetCurrentFrame(int i) { return currentFrame = i; }; + int SetCurrentStrip(int i) { return currentStrip = i; }; + int SetInterval(int i) { ticks = 0; return interval = i; } + + int GetCurrentFrame() const { return currentFrame; }; + int GetCurrentStrip() const { return currentStrip; }; + int GetInterval() const { return interval; }; +private: + int currentFrame, maxFrames; + int currentStrip, maxStrips; + int interval, ticks; +}; + +#endif diff --git a/client/unit.cpp b/client/unit.cpp index 171a65f..d23cce1 100644 --- a/client/unit.cpp +++ b/client/unit.cpp @@ -1,3 +1,5 @@ +#include "delta.h" +#include "sprite_sheet.h" #include "image.h" #include "surface_manager.h" @@ -5,6 +7,8 @@ #include #include +#include +#include using namespace std; @@ -17,11 +21,23 @@ int go(int, char**) { //load all resources sMgr.Load("player", "rsc/graphics/sprites/elliot2.bmp"); + sMgr.Load("flower", "rsc/graphics/sprites/aniflower.bmp"); sMgr.Load("tileset", "rsc/graphics/tilesets/MishMash.bmp"); - Image player(sMgr.Get("player")); + SpriteSheet player(sMgr.Get("player"), 32, 48); Image tiles(sMgr.Get("tileset")); + player.SetInterval(200); + + vector flowerVector; + for (int i = 0; i < 100; i++) { + SpriteSheet ss(sMgr.Get("flower"), 32, 32); + ss.SetInterval(i%5 + 95); + flowerVector.push_back(ss); + } + + Delta delta; + bool running = true; while (running) { SDL_Event event; @@ -35,15 +51,39 @@ int go(int, char**) { case SDLK_ESCAPE: running = false; break; + case SDLK_1: + player.SetCurrentStrip(0); + break; + case SDLK_2: + player.SetCurrentStrip(1); + break; + case SDLK_3: + player.SetCurrentStrip(2); + break; + case SDLK_4: + player.SetCurrentStrip(3); + break; } } } + delta.Calculate(); + + player.Update(delta.GetDelta()); + + for (int i = 0; i < 100; i++) { + flowerVector[i].Update(delta.GetDelta()); + } + SDL_FillRect(screen, 0, 0); tiles.DrawTo(screen, 0, 0); player.DrawTo(screen, 0, 0); + for (int i = 0; i < 100; i++) { + flowerVector[i].DrawTo(screen, 20+i*4, i*4); + } + SDL_Flip(screen); } diff --git a/rsc/graphics/sprites/aniflower.bmp b/rsc/graphics/sprites/aniflower.bmp new file mode 100644 index 0000000000000000000000000000000000000000..fbc60f5b7c5737f2298f382ee800121b05e7d153 GIT binary patch literal 12342 zcmeH}Jx&}!5QT@>nI$AbhXe#f$T4zii4*u9NDiF(Dg?x&z5o{>aqi5qCH#6`^R`qo zwAk({%R!^rR?p9V_4=#c5!auuE|>N13gbCG-|+c>&&hIz5r4S<{vAKOuq@BZ^E{@3 zX)zcv^7(|*6xPhuB@5ea_^Lj8hALJIy`08#@ZlTB-R}f_{E{{f)!A zLUp&~qfTG*!xH~9+?laXG#||GN>IMWaYatP>+B%k!9m;d2mQDbTRw_Lm5_Ej2~@Pj zj=-%MOXi&9Ksi9!D&j|#ApFOEX zbXWTPGoHeuxtfd5XZRXCb`*_dqA+q7vBV&sUneR&Ki0eD^9n|%2v<7%kb~q_5y&Bm z1mC80;g3zu=Yds;jQsRZ8{#uLOFK&)s~|@Uv2fPK$h#eI=Ev8G)rc!hK0;<55;$5u zuHZDJ%5Dk3bzN2Z6w#7xB^M$-Cf(#+cobQw0L;s8tFWh5xYnY_`X*e0R)Nz#&hEFY w9|qoiY~*5Ueg$Lryd{XQicu4hF^OV2&Oa#OD$dhsU>cYPrh#c-8W=S27YPS~bpQYW literal 0 HcmV?d00001 diff --git a/rsc/graphics/sprites/aniflower.png b/rsc/graphics/sprites/aniflower.png deleted file mode 100644 index f0f3696ef038fc338a6566bfc243ac70ad22aa2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmV-r1DgDaP)WdH}-0TlrR27DUwf&c&j2XskIMF-je6#)eSE@ZV300009a7bBm000XT z000XT0n*)m`~Uy~<4Ht8RCwC$nK6shU=W5UVr8l5S%_91Dq37;V_{{hmV*9*LBYa8uhiPcZW~e2O1a`r(b9H(@7~*C$d_E=H}hRqHbV&6usrk5yz?cyNi~z1 zj4@ms8d|`z$7sO7F&Z#%j0OxGhx>f#+nv{XeCFAWSOxztJS0Wc`6~zsj-Ebts&z$E*aw+B_|@4NCdWex>jz za;*Ml1MJjqK7A*14@kFJ^9*QomvH8#wb`8_-_8yBIy6oX0`<2VplIOeL1Vs*N)&Dl zw$d#>&t0NGPP^lThwE?t74-SbS3L$%b=PJJU(22&=mQxWuc0LSyKiNK3=TKhUAWn_ za{8MMxc2@&nyWJoW7FlFEnVFu#2ReR+ac&5Z!bTtk#(zeCyyVlzvF*^=8$CkvxDwh zzD?(`HdUUU)b2pWBIs{5K+~i|e+?-us`a(*C^pdASpEC0fYgH$ZIULBqb9VG?;o8& z{oQ}Wa8*6GdNxgP`|3nL{&<-4OqghYRM)FFTaRid@7z#0?Z;bQ-9xAlE}e}on6sU!5)E+M)z4_Mk54H!5^0|t)21RC-Ga$>oK00000NkvXXu0mjf_2`kJ