Wchodzisz do sklepu chcąc kupić grę komputerową. Przez chwilę oglądasz screeny i oceniasz grafikę. Ładna, więc warto kupić! Tak samo jak my, gry mają tylko jedną szansę aby zrobić pierwsze wrażenie. Dobrze zrobiona grafika może tylko pomóc naszej grze. Spójrzmy jak łatwo możemy zmienić szatę graficzną naszej platformówki.
Poprzedni artykuł - Efektowne przejścia między stanami [1] Następny artykuł - Edytor poziomów cz. 1 [2]
1 2 3 4 5 6 7 8 9 | m_level_view.StoreSprite(FT::PlatformLeftEnd, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("platform_left")))); m_level_view.StoreSprite(FT::PlatformMidPart, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("platform_mid")))); m_level_view.StoreSprite(FT::PlatformRightEnd, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("platform_right")))); m_level_view.StoreSprite(FT::EndOfLevel, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("end_of_level")))); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | m_level_view.StoreSprite(FT::PlatformTopLeft, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("PlatformTopLeft")))); m_level_view.StoreSprite(FT::PlatformLeft, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("PlatformLeft")))); m_level_view.StoreSprite(FT::PlatfromMid, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("PlatfromMid")))); m_level_view.StoreSprite(FT::PlatformTop, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("PlatformTop")))); m_level_view.StoreSprite(FT::PlatformLeftTopRight, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("PlatformLeftTopRight")))); m_level_view.StoreSprite(FT::PlatformLeftRight, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("PlatformLeftRight")))); m_level_view.StoreSprite(FT::PlatformTopRight, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("PlatformTopRight")))); m_level_view.StoreSprite(FT::PlatformRight, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("PlatformRight")))); m_level_view.StoreSprite(FT::EndOfLevel, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("EndOfLevel")))); m_level_view.StoreSprite(FT::NcPlatformTopLeft, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("NcPlatformTopLeft")))); m_level_view.StoreSprite(FT::NcPlatformLeft, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("NcPlatformLeft")))); m_level_view.StoreSprite(FT::NcPlatfromMid, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("NcPlatfromMid")))); m_level_view.StoreSprite(FT::NcPlatformTop, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("NcPlatformTop")))); m_level_view.StoreSprite(FT::NcPlatformLeftTopRight, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("NcPlatformLeftTopRight")))); m_level_view.StoreSprite(FT::NcPlatformLeftRight, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("NcPlatformLeftRight")))); m_level_view.StoreSprite(FT::NcPlatformTopRight, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("NcPlatformTopRight")))); m_level_view.StoreSprite(FT::NcPlatformRight, SpritePtr(new Sprite(engine.GetSpriteConfig()->Get("NcPlatformRight")))); |
1 2 3 4 5 6 7 8 9 10 11 12 13 | namespace FT { enum FieldType { None = 0, PlatformLeftEnd = 1, PlatformMidPart = 2, PlatformRightEnd = 3, EndOfLevel = 4, COUNT }; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | enum FieldType { None = 0, EndOfLevel = 1, COLLIDING_START = 10000, PlatformTopLeft, // 10001 PlatformLeft, // 10002 PlatfromMid, // 10003 PlatformTop, // 10004 PlatformLeftTopRight, // 10005 PlatformLeftRight, // 10006 PlatformTopRight, // 10007 PlatformRight, // 10008 COLLIDING_END, NON_COLLIDING_START = 20000, NcPlatformTopLeft, NcPlatformLeft, NcPlatfromMid, NcPlatformTop, NcPlatformLeftTopRight, NcPlatformLeftRight, NcPlatformTopRight, NcPlatformRight, NcCandleWithBg, NcCandleNoBg, NcCrackWithBg, NcCrackNoBg, NON_COLLIDING_END }; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | SpriteConfig::SpriteConfig() { Insert("player_right", SpriteConfigData(DL::Player, 4, 0.1, 0, 4 * 32, 32, 32, true)); Insert("player_left", SpriteConfigData(DL::Player, 4, 0.1, 0, 5 * 32, 32, 32, true)); Insert("player_stop", SpriteConfigData(DL::Player, 8, 0.1, 0, 6 * 32, 32, 32, true)); Insert("platform_left", SpriteConfigData(DL::Foreground, 1, 1, 0, 1*32, 32, 32, true)); Insert("platform_mid", SpriteConfigData(DL::Foreground, 1, 1, 0, 2*32, 32, 32, true)); Insert("platform_right", SpriteConfigData(DL::Foreground, 1, 1, 0, 3*32, 32, 32, true)); Insert("end_of_level", SpriteConfigData(DL::Foreground, 1, 1, 32, 2*32, 32, 32, true)); Insert("mush_right", SpriteConfigData(DL::Entity, 4, 0.3, 0, 11 * 32, 32, 32, true)); Insert("mush_left", SpriteConfigData(DL::Entity, 4, 0.3, 0, 11 * 32, 32, 32, true)); Insert("mush_stop", SpriteConfigData(DL::Entity, 1, 0.3, 0, 12 * 32, 32, 32, true)); Insert("player_bullet", SpriteConfigData(DL::Entity, 4, 0.3, 5*32, 11*32, 32, 32, true)); Insert("twinshot_upgrade", SpriteConfigData(DL::Entity, 2, 0.3, 0*32, 13*32, 32, 32, true)); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | SpriteConfig::SpriteConfig() { Insert("PlatformTopLeft" , SpriteConfigData(DL::Foreground, 1, 1, 0*32, 1*32, 32, 32, false, false)); Insert("PlatformLeft" , SpriteConfigData(DL::Foreground, 1, 1, 1*32, 1*32, 32, 32, false, false)); Insert("PlatfromMid" , SpriteConfigData(DL::Foreground, 1, 1, 0*32, 2*32, 32, 32, false, false)); Insert("PlatformTop" , SpriteConfigData(DL::Foreground, 1, 1, 1*32, 2*32, 32, 32, false, false)); Insert("PlatformLeftTopRight" , SpriteConfigData(DL::Foreground, 1, 1, 2*32, 2*32, 32, 32, false, false)); Insert("PlatformLeftRight" , SpriteConfigData(DL::Foreground, 1, 1, 3*32, 2*32, 32, 32, false, false)); Insert("PlatformTopRight" , SpriteConfigData(DL::Foreground, 1, 1, 0*32, 3*32, 32, 32, false, false)); Insert("PlatformRight" , SpriteConfigData(DL::Foreground, 1, 1, 1*32, 3*32, 32, 32, false, false)); Insert("EndOfLevel" , SpriteConfigData(DL::Foreground, 4, 0.1, 4*32, 2*32, 32, 32, true, false)); Insert("NcPlatformTopLeft" , SpriteConfigData(DL::Background, 1, 1, 0*32, 1*32, 32, 32, false, true)); Insert("NcPlatformLeft" , SpriteConfigData(DL::Background, 1, 1, 1*32, 1*32, 32, 32, false, true)); Insert("NcPlatfromMid" , SpriteConfigData(DL::Background, 1, 1, 0*32, 2*32, 32, 32, false, true)); Insert("NcPlatformTop" , SpriteConfigData(DL::Background, 1, 1, 1*32, 2*32, 32, 32, false, true)); Insert("NcPlatformLeftTopRight" , SpriteConfigData(DL::Background, 1, 1, 2*32, 2*32, 32, 32, false, true)); Insert("NcPlatformLeftRight" , SpriteConfigData(DL::Background, 1, 1, 3*32, 2*32, 32, 32, false, true)); Insert("NcPlatformTopRight" , SpriteConfigData(DL::Background, 1, 1, 0*32, 3*32, 32, 32, false, true)); Insert("NcPlatformRight" , SpriteConfigData(DL::Background, 1, 1, 1*32, 3*32, 32, 32, false, true)); Insert("mush_right", SpriteConfigData(DL::Entity, 4, 0.3, 0, 12 * 32, 32, 32, true, false)); Insert("mush_left", SpriteConfigData(DL::Entity, 4, 0.3, 0, 13 * 32, 32, 32, true, false)); Insert("mush_stop", SpriteConfigData(DL::Entity, 4, 0.3, 0, 14 * 32, 32, 32, true, false)); Insert("player_right", SpriteConfigData(DL::Player, 4, 0.1, 0, 4 * 32, 32, 32, true, false)); Insert("player_left", SpriteConfigData(DL::Player, 4, 0.1, 0, 5 * 32, 32, 32, true, false)); Insert("player_stop", SpriteConfigData(DL::Player, 8, 0.1, 0, 6 * 32, 32, 32, true, false)); Insert("player_bullet", SpriteConfigData(DL::Entity, 1, 0.3, 6*32, 13*32, 32, 32, true, false)); Insert("twinshot_upgrade", SpriteConfigData(DL::Entity, 4, 0.1, 6*32, 15*32, 32, 32, true, false)); } |
1 2 3 4 | void Renderer::DrawSprite(double tex_x, double tex_y, double tex_w, double tex_h, double pos_x, double pos_y, double width, double height, DL::DisplayLayer layer) { |
1 2 3 4 5 | void Renderer::DrawSprite(double tex_x, double tex_y, double tex_w, double tex_h, double pos_x, double pos_y, double width, double height, DL::DisplayLayer layer, double brightness) { |
1 2 3 4 5 6 7 8 9 10 11 12 | if (m_dark) { Engine::Get().GetRenderer()->DrawSprite( m_data.left + m_data.width * m_current_frame, m_data.bottom, m_data.width, m_data.height, x, y, width, height, m_data.layer, 0.15); } else { Engine::Get().GetRenderer()->DrawSprite( m_data.left + m_data.width * m_current_frame, m_data.bottom, m_data.width, m_data.height, x, y, width, height, m_data.layer); } |
1 2 | std::vector<SpritePtr> m_sprites; |
1 2 | std::map<FT::FieldType, SpritePtr> m_sprites; |
1 2 3 4 5 6 | void SpriteGrid::SetLevel(const LevelPtr lvl, double dx) { //... SetSprite(x, y, m_sprites.at(ft)); //... } |
1 2 3 4 5 6 7 8 9 10 11 12 | void SpriteGrid::SetLevel(const LevelPtr lvl, double dx) { //... std::map<FT::FieldType, SpritePtr>::iterator it = m_sprites.find(ft); if (it != m_sprites.end()) { SetSprite(x, y, it->second); } else { SetSprite(x, y, SpritePtr()); } //... } |
1 2 3 4 5 | void SpriteGrid::StoreSprite(FT::FieldType ft, SpritePtr sp) { if (m_sprites.size() <= static_cast<size_t>(ft)) m_sprites.resize(ft + 1); m_sprites.at(ft) = sp; } |
1 2 3 4 5 | SpriteGrid.cpp~NEW void SpriteGrid::StoreSprite(FT::FieldType ft, SpritePtr sp) { m_sprites.insert(std::make_pair(ft, sp)); } |
1 2 3 4 5 6 7 8 9 10 11 12 | void SpriteGrid::Update(double dt) { for (size_t y = 0; y < m_grid.size(); ++y) { const std::vector<SpritePtr>& row = m_grid.at(y); for (size_t x = 0; x < row.size(); ++x) { const SpritePtr& sprite = row.at(x); if (sprite) { sprite->Update(dt); } } } } |
1 2 | return !IsDone(); // było tylko to |
1 2 3 | // zaaktualizuj stan mapy kaflowej (np. animację kafli) m_level_view.Update(dt); |
1 2 3 4 5 6 7 8 9 | const SpriteConfigData horizontal_road_data(DL::Foreground, 1, 1, 0 * 32, 14 * 32, 32, 32, false); const SpriteConfigData vertical_road_data(DL::Foreground, 1, 1, 1 * 32, 14 * 32, 32, 32, false); const SpriteConfigData entry_enabled_data(DL::Foreground, 1, 1, 6 * 32, 14 * 32, 32, 32, false); const SpriteConfigData face_data(DL::Foreground, 8, .1, 8 * 32, 14 * 32, 32, 32, true); |
1 2 3 4 5 6 7 8 9 | const SpriteConfigData horizontal_road_data(DL::Foreground, 1, 1, 0 * 32, 17 * 32, 32, 32, false, false); const SpriteConfigData vertical_road_data(DL::Foreground, 1, 1, 1 * 32, 17 * 32, 32, 32, false, false); const SpriteConfigData entry_enabled_data(DL::Foreground, 4, .1, 4 * 32, 17 * 32, 32, 32, true, false); const SpriteConfigData face_data(DL::Foreground, 4, .1, 0 * 32, 23 * 32, 32, 32, true, false); |
Pobierz [4] nowy kod źródłowy
Odnośniki:
[1] http://informatyka.wroc.pl/node/705
[2] http://informatyka.wroc.pl/node/878
[3] http://informatyka.wroc.pl/node/712
[4] http://informatyka.wroc.pl/upload/lmm/magame/nowa_grafa/nowa_grafika.zip