Skip to content

Commit 2a0bada

Browse files
committed
增加摄像机 摄像机跟随
1 parent 4d7e43a commit 2a0bada

File tree

36 files changed

+579
-195
lines changed

36 files changed

+579
-195
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/bin
2+
/CMakeLists.txt.user

application/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@ add_subdirectory(chapter-29)
3131
add_subdirectory(chapter-30)
3232
add_subdirectory(chapter-31)
3333
add_subdirectory(chapter-32)
34+
add_subdirectory(chapter-33)

application/chapter-04/main.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <Text.h>
77
#include <Sprite.h>
88
#include <TileMap.h>
9+
#include <ResourceManager.h>
910

1011
using namespace std;
1112

@@ -15,7 +16,8 @@ std::shared_ptr<Sprite> createSprite(const std::string &image, float x, float y)
1516
{
1617
auto sprite = std::make_shared<Sprite>();
1718
sprite->setPosition(x, y);
18-
auto texture = Application::getInstance()->loadTexture(image);
19+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
20+
auto texture = textureManager->loadFromFile(image);
1921
sprite->addTexture(*texture);
2022
return sprite;
2123
}
@@ -56,7 +58,7 @@ int main()
5658
{
5759
auto size = sf::Vector2f(960, 720);
5860
auto window = std::make_shared<sf::RenderWindow>(sf::VideoMode(size.x, size.y), "Chapter-4",
59-
sf::Style::Close);
61+
sf::Style::Close);
6062
window->setVerticalSyncEnabled(true);
6163

6264
auto app = Application::getInstance();
@@ -122,12 +124,14 @@ int main()
122124

123125
std::vector<sf::Color> spriteColor = {sf::Color::White, sf::Color::Red, sf::Color::Green, sf::Color::Blue};
124126

127+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
128+
125129
for (int i = 0; i < 30; i++) {
126130
auto sprite = createSprite(units.at(rand() % units.size()), rand() % 800, rand() % 600);
127131
int index = rand() % modifers.size();
128-
sprite->addTexture(*Application::getInstance()->loadTexture(modifers[index]));
132+
sprite->addTexture(*textureManager->loadFromFile(modifers[index]));
129133
index = rand() % sizes.size();
130-
sprite->addTexture(*Application::getInstance()->loadTexture(sizes[index]));
134+
sprite->addTexture(*textureManager->loadFromFile(sizes[index]));
131135
sprite->setSpriteColor(spriteColor[rand() % spriteColor.size()]);
132136
object->addChild(sprite);
133137
}

application/chapter-05/main.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <Text.h>
66
#include <Scene.h>
77
#include <Sprite.h>
8+
#include <ResourceManager.h>
89

910
auto screenSize = sf::Vector2f(800, 640);
1011

@@ -14,7 +15,10 @@ std::shared_ptr<Sprite> createSprite(const std::string &image)
1415
{
1516
auto sprite = std::make_shared<Sprite>();
1617
sprite->setSpriteColor(sf::Color::Yellow);
17-
auto texture = Application::getInstance()->loadTexture(image);
18+
19+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
20+
21+
auto texture = textureManager->loadFromFile(image);
1822
sprite->addTexture(*texture);
1923

2024
sf::Vector2f size(texture->getSize().x, texture->getSize().y);
@@ -89,7 +93,9 @@ int main()
8993
auto scene = std::make_shared<Scene>();
9094
scene->setName("scene");
9195

92-
auto background = Application::getInstance()->loadTexture("../resource/images/background.png");
96+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
97+
98+
auto background = textureManager->loadFromFile("../resource/images/background.png");
9399
scene->setBackground(*background);
94100

95101
auto sprite = createSprite("../resource/images/plane.png");

application/chapter-06/main.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <Scene.h>
55
#include <Animation.h>
66
#include <Text.h>
7+
#include <ResourceManager.h>
78

89
#define WIN_SIZE 640
910

@@ -58,7 +59,9 @@ int main()
5859
auto scene = std::make_shared<Scene>();
5960
scene->setName("scene");
6061

61-
auto background = Application::getInstance()->loadTexture("../resource/images/grid.png");
62+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
63+
64+
auto background = textureManager->loadFromFile("../resource/images/grid.png");
6265
scene->setBackground(*background);
6366

6467
for(int i = 0; i < 100; i++)

application/chapter-07/main.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <Text.h>
77
#include <MovingSprite.h>
88
#include <Util.h>
9+
#include <ResourceManager.h>
910

1011
auto screenSize = sf::Vector2f(960, 640);
1112
#define BULLET_SPEED sf::Vector2f(0, -160.0f)
@@ -17,7 +18,9 @@ std::shared_ptr<Scene> scene;
1718
std::shared_ptr<Sprite> createSprite(const std::string &image, VMode vMode)
1819
{
1920
auto sprite = std::make_shared<Sprite>();
20-
auto texture = Application::getInstance()->loadTexture(image);
21+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
22+
23+
auto texture = textureManager->loadFromFile(image);
2124
sprite->addTexture(*texture);
2225

2326
sf::Vector2f size(texture->getSize().x, texture->getSize().y);
@@ -50,7 +53,9 @@ class SpriteMessageListener : public MessageListener
5053
sprite->move(5, 0);
5154
return true;
5255
} else if (event.key.code == sf::Keyboard::Key::Space) {
53-
auto texture = Application::getInstance()->loadTexture("../resource/images/bullet.png");
56+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
57+
58+
auto texture = textureManager->loadFromFile("../resource/images/bullet.png");
5459
auto bullet = std::make_shared<MovingSprite>();
5560
bullet->addTexture(*texture);
5661

@@ -83,7 +88,8 @@ int main()
8388
scene = std::make_shared<Scene>();
8489
scene->setName("scene");
8590

86-
auto background = Application::getInstance()->loadTexture("../resource/images/background.png");
91+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
92+
auto background = textureManager->loadFromFile("../resource/images/background.png");
8793
scene->setBackground(*background);
8894

8995
auto sprite = createSprite("../resource/images/plane.png", VMode_Bottom);

application/chapter-08/main.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <Animation.h>
1010
#include <MovingSprite.h>
1111
#include <QuadTreeScene.h>
12+
#include <ResourceManager.h>
1213

1314
auto screenSize = sf::Vector2f(960, 640);
1415
#define BULLET_SPEED sf::Vector2f(0, -160.0f)
@@ -20,7 +21,8 @@ std::shared_ptr<QuadTreeScene> scene;
2021
std::shared_ptr<Sprite> createSprite(const std::string &image, VMode vMode)
2122
{
2223
auto sprite = std::make_shared<Sprite>();
23-
auto texture = Application::getInstance()->loadTexture(image);
24+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
25+
auto texture = textureManager->loadFromFile(image);
2426
sprite->addTexture(*texture);
2527

2628
sf::Vector2f size(texture->getSize().x, texture->getSize().y);
@@ -95,7 +97,9 @@ class SpriteMessageListener : public MessageListener
9597
sprite->move(5, 0);
9698
return true;
9799
} else if (event.key.code == sf::Keyboard::Key::Space) {
98-
auto texture = Application::getInstance()->loadTexture("../resource/images/bullet.png");
100+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
101+
102+
auto texture = textureManager->loadFromFile("../resource/images/bullet.png");
99103
auto bullet = std::make_shared<MovingSprite>();
100104
bullet->setSpriteOwner(sprite);
101105
bullet->setSpriteStatus(SpriteStatus_Normal);
@@ -136,7 +140,8 @@ int main()
136140
scene->addConllisionGroupID(SpriteGroupID_PlayerA);
137141
scene->addConllisionGroupID(SpriteGroupID_PlayerB);
138142

139-
auto background = Application::getInstance()->loadTexture("../resource/images/background.png");
143+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
144+
auto background = textureManager->loadFromFile("../resource/images/background.png");
140145
scene->setBackground(*background);
141146

142147
auto sprite = createSprite("../resource/images/plane.png", VMode_Bottom);

application/chapter-09/main.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <MovingSprite.h>
1111
#include <QuadTreeScene.h>
1212
#include <SpriteDeleter.h>
13+
#include <ResourceManager.h>
1314

1415
auto screenSize = sf::Vector2f(960, 640);
1516
#define BULLET_SPEED sf::Vector2f(0, -160.0f)
@@ -21,7 +22,9 @@ std::shared_ptr<QuadTreeScene> scene;
2122
std::shared_ptr<Sprite> createSprite(const std::string &image, VMode vMode)
2223
{
2324
auto sprite = std::make_shared<Sprite>();
24-
auto texture = Application::getInstance()->loadTexture(image);
25+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
26+
27+
auto texture = textureManager->loadFromFile(image);
2528
sprite->addTexture(*texture);
2629

2730
sf::Vector2f size(texture->getSize().x, texture->getSize().y);
@@ -88,11 +91,12 @@ class SpriteMessageListener : public MessageListener
8891
return true;
8992
} else if (event.key.code == sf::Keyboard::Key::Right) {
9093
if (sprite->getPosition().x + sprite->getSize().x <
91-
Application::getInstance()->getWindow()->getSize().x - 5)
94+
Application::getInstance()->getWindow()->getSize().x - 5)
9295
sprite->move(5, 0);
9396
return true;
9497
} else if (event.key.code == sf::Keyboard::Key::Space) {
95-
auto texture = Application::getInstance()->loadTexture("../resource/images/bullet.png");
98+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
99+
auto texture = textureManager->loadFromFile("../resource/images/bullet.png");
96100
auto bullet = std::make_shared<MovingSprite>();
97101
bullet->setSpriteStatus(SpriteStatus_Normal);
98102
bullet->setSpriteOwner(sprite);
@@ -118,8 +122,8 @@ class SpriteMessageListener : public MessageListener
118122
int main()
119123
{
120124
auto window = std::make_shared<sf::RenderWindow>(sf::VideoMode(screenSize.x, screenSize.y),
121-
"Chapter-9",
122-
sf::Style::Close);
125+
"Chapter-9",
126+
sf::Style::Close);
123127
window->setVerticalSyncEnabled(true);
124128

125129
auto app = Application::getInstance();
@@ -136,7 +140,8 @@ int main()
136140
auto spriteDeleter = SpriteDeleter::create(SpriteDeleter_Slop);
137141
scene->addSpriteDeleter(SpriteGroupID_Bullet, spriteDeleter);
138142

139-
auto background = Application::getInstance()->loadTexture("../resource/images/background.png");
143+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
144+
auto background = textureManager->loadFromFile("../resource/images/background.png");
140145
scene->setBackground(*background);
141146

142147
auto sprite = createSprite("../resource/images/plane.png", VMode_Bottom);

application/chapter-11/main.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@
66
#include <Scene.h>
77
#include <Sprite.h>
88
#include <SpritePool.h>
9+
#include <ResourceManager.h>
910

1011
using namespace std;
1112

1213
auto screenSize = sf::Vector2f(800, 640);
1314

1415
std::shared_ptr<Sprite> createSprite(const std::string &image)
1516
{
17+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
18+
1619
auto pool = Application::getInstance()->getComponent<SpritePool<Sprite>>();
17-
auto texture = Application::getInstance()->loadTexture(image);
20+
auto texture = textureManager->loadFromFile(image);
1821
auto sprite = pool->createOrAwakeSprite();
1922
sprite->setSize(texture->getSize().x, texture->getSize().y);
2023
sprite->setSpriteColor(sf::Color::Yellow);
@@ -44,7 +47,7 @@ class SpriteMessageListener : public MessageListener
4447
return true;
4548
} else if (event.key.code == sf::Keyboard::Key::Right) {
4649
if (sprite->getPosition().x <
47-
Application::getInstance()->getWindow()->getSize().x - 5)
50+
Application::getInstance()->getWindow()->getSize().x - 5)
4851
sprite->move(5, 0);
4952
return true;
5053
} else if (event.key.code == sf::Keyboard::Key::Up) {
@@ -53,7 +56,7 @@ class SpriteMessageListener : public MessageListener
5356
return true;
5457
} else if (event.key.code == sf::Keyboard::Key::Down) {
5558
if (sprite->getPosition().y <
56-
Application::getInstance()->getWindow()->getSize().y - 5)
59+
Application::getInstance()->getWindow()->getSize().y - 5)
5760
sprite->move(0, 5);
5861
return true;
5962
}
@@ -68,8 +71,8 @@ class SpriteMessageListener : public MessageListener
6871
int main()
6972
{
7073
auto window = std::make_shared<sf::RenderWindow>(sf::VideoMode(screenSize.x, screenSize.y),
71-
"Chapter-11",
72-
sf::Style::Close);
74+
"Chapter-11",
75+
sf::Style::Close);
7376
window->setVerticalSyncEnabled(true);
7477

7578
auto app = Application::getInstance();
@@ -82,7 +85,8 @@ int main()
8285
auto scene = std::make_shared<Scene>();
8386
scene->setName("scene");
8487

85-
auto background = Application::getInstance()->loadTexture("../resource/images/background.png");
88+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
89+
auto background = textureManager->loadFromFile("../resource/images/background.png");
8690
scene->setBackground(*background);
8791

8892
auto font = std::make_shared<sf::Font>();

application/chapter-12/main.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <QuadTreeScene.h>
1212
#include <SpriteDeleter.h>
1313
#include <SpritePool.h>
14+
#include <ResourceManager.h>
1415

1516
auto screenSize = sf::Vector2f(960, 640);
1617
#define BULLET_SPEED sf::Vector2f(0, -160.0f)
@@ -24,7 +25,8 @@ class Bullet : public MovingSprite
2425
public:
2526
Bullet()
2627
{
27-
auto texture = Application::getInstance()->loadTexture("../resource/images/bullet.png");
28+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
29+
auto texture = textureManager->loadFromFile("../resource/images/bullet.png");
2830
addTexture(*texture);
2931
setVelocity(BULLET_SPEED);
3032
setSpriteGroup(SpriteGroupID_Bullet);
@@ -35,7 +37,8 @@ std::shared_ptr<Sprite> createSprite(const std::string &image, VMode vMode)
3537
{
3638
auto sprite = std::make_shared<Sprite>();
3739
sprite->setSpriteStatus(SpriteStatus_Normal);
38-
auto texture = Application::getInstance()->loadTexture(image);
40+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
41+
auto texture = textureManager->loadFromFile(image);
3942
sprite->addTexture(*texture);
4043

4144
sf::Vector2f size(texture->getSize().x, texture->getSize().y);
@@ -55,7 +58,7 @@ class MyQuadTreeScene : public QuadTreeScene
5558
if (current->getBoundingBox().intersects(target->getBoundingBox(), area)) {
5659
auto position = getRectCenter(area);
5760
auto animation = createAnimation();
58-
animation->setCenter(position);
61+
animation->setPosition(position);
5962
addChild(animation);
6063
}
6164
}
@@ -102,7 +105,7 @@ class SpriteMessageListener : public MessageListener
102105
return true;
103106
} else if (event.key.code == sf::Keyboard::Key::Right) {
104107
if (sprite->getPosition().x + sprite->getSize().x <
105-
Application::getInstance()->getWindow()->getSize().x - 5)
108+
Application::getInstance()->getWindow()->getSize().x - 5)
106109
sprite->move(5, 0);
107110
return true;
108111
} else if (event.key.code == sf::Keyboard::Key::Space) {
@@ -148,7 +151,7 @@ int main()
148151
{
149152
auto size = sf::Vector2f(screenSize.x, screenSize.y);
150153
auto window = std::make_shared<sf::RenderWindow>(sf::VideoMode(size.x, size.y), "Chapter-12",
151-
sf::Style::Close);
154+
sf::Style::Close);
152155
window->setVerticalSyncEnabled(true);
153156

154157
auto app = Application::getInstance();
@@ -167,7 +170,9 @@ int main()
167170
auto spriteDeleter = SpriteDeleter::create(SpriteDeleter_Slop);
168171
scene->addSpriteDeleter(SpriteGroupID_Bullet, spriteDeleter);
169172

170-
auto background = Application::getInstance()->loadTexture("../resource/images/background.png");
173+
auto textureManager = Application::getInstance()->getComponent<ResourceManager<sf::Texture>>();
174+
175+
auto background = textureManager->loadFromFile("../resource/images/background.png");
171176
scene->setBackground(*background);
172177

173178
auto sprite = createSprite("../resource/images/plane.png", VMode_Bottom);

0 commit comments

Comments
 (0)