📄 sspritemanager.cpp
字号:
/*
Author: Bear
This source is free to anybody.
If you have any problem with this or some advice to me, please:
mailto: heyang22118952.student@sina.com
or yang45249.student@sina.com
or you can contact me through my QQ: 261570581
Welcome to discuss game programming techniques with me :)
And I like to play games!
*/
#include ".\sspritemanager.h"
#include <fstream>
#include <string>
SSpriteManager::SSpriteManager(void)
: loaded(false), m_factory(NULL)
{
}
SSpriteManager::~SSpriteManager(void)
{
UnLoad();
}
bool SSpriteManager::Load(SSpriteFactory *pSpriteFactory, const char* monsterDefineFileName)
{
assert(pSpriteFactory != NULL);
assert(monsterDefineFileName != NULL && monsterDefineFileName != "");
if(loaded) {
UnLoad();
}
m_factory = pSpriteFactory;
std::ifstream ifs(monsterDefineFileName);
assert(ifs);
char buf[256];
ifs.getline(buf, 255); //comment
std::string name;
int posX, posY;
while(!ifs.eof()) {
ifs>>name>>posX>>posY;
assert(posX >= 0 && posX <= MAP_WIDTH);
assert(posY >= 0 && posY <= MAP_HEIGHT);
SSprite* aSprite = pSpriteFactory->Create(name.c_str(), posX*SLICE_WIDTH, posY*SLICE_HEIGHT);
if(aSprite == NULL) {
return false;
}
sprites.push_back(aSprite);
}
loaded = true;
return loaded;
}
void SSpriteManager::UnLoad(void)
{
std::vector<SSprite*>::iterator it;
for(it = sprites.begin(); it!=sprites.end(); it++) {
delete (SSprite*)(*it);
}
sprites.clear();
loaded = false;
}
bool SSpriteManager::Draw(BDirectDrawSurface* pDest, int worldX, int worldY)
{
assert(loaded);
assert(pDest != NULL);
std::vector<SSprite*>::iterator it;
for(it = sprites.begin(); it!=sprites.end(); it++) {
if(!((SSprite*)(*it))->Draw(pDest, worldX, worldY)) {
DXTRACE_MSG("SSpriteManager::Draw(): Draw sprite failed");
}
}
return true;
}
void SSpriteManager::Anim(void)
{
assert(loaded);
int length = (int)sprites.size();
for(int i=0; i<length; i++) {
sprites[i]->Anim();
}
}
int SSpriteManager::GetCount(void)
{
return (int)this->sprites.size();
}
SSprite* SSpriteManager::GetSprite(int index)
{
assert(loaded);
assert(index >= 0 && index < (int)sprites.size());
return (SSprite*)(sprites[index]);
}
bool SSpriteManager::Delete(SSprite* sprite)
{
assert(loaded);
assert(sprite != NULL);
std::vector<SSprite*>::iterator it;
for(it = sprites.begin(); it!=sprites.end(); it++) {
if(sprite == (SSprite*)(*it)) {
sprites.erase(it);
break;
}
}
delete sprite;
return true;
}
bool SSpriteManager::Add(int row, int col, int index)
{
assert(row >= 0 && row <= MAP_HEIGHT);
assert(col >= 0 && col <= MAP_WIDTH);
assert(index >=0 && index < SPRITE_KINDS);
std::vector<SSprite*>::iterator it;
for(it = sprites.begin(); it!=sprites.end(); it++) {
if(col == ((SSprite*)(*it))->GetX()/SLICE_WIDTH && row == ((SSprite*)(*it))->GetY()/SLICE_HEIGHT) {
return true;
}
}
SSprite* aSprite = m_factory->Create(index, col*SLICE_WIDTH, row*SLICE_HEIGHT);
assert(aSprite != NULL);
sprites.push_back(aSprite);
return true;
}
bool SSpriteManager::Save(char* fileName)
{
assert(fileName != NULL && fileName != "");
std::ofstream ofs(fileName);
assert(ofs);
ofs<<";Name x y";
std::vector<SSprite*>::iterator it;
for(it = sprites.begin(); it!=sprites.end(); it++) {
ofs<<std::endl<<((SSprite*)(*it))->GetName()<<"\t"<<((SSprite*)(*it))->GetX()/SLICE_WIDTH<<"\t"<<((SSprite*)(*it))->GetY()/SLICE_HEIGHT;
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -