From 95a847c83698e545fb8c73b9c2e1162e8b39f890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Str=C3=B6mb=C3=A4ck?= <filip.stromback@liu.se> Date: Mon, 21 Nov 2022 10:00:21 +0100 Subject: [PATCH] Updated introduction a bit for 2022. --- basic/player.png | Bin 0 -> 2758 bytes basic/step05.cpp | 1 + basic/step06.cpp | 2 +- basic/step07.cpp | 120 +++++++++++++++++++++++++++++++++++++++++++++++ basic/step08.cpp | 74 +++++++++++++++++++++++++++++ 5 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 basic/player.png create mode 100644 basic/step07.cpp create mode 100644 basic/step08.cpp diff --git a/basic/player.png b/basic/player.png new file mode 100644 index 0000000000000000000000000000000000000000..f19959c83b34b2833d9da7300114c225faa6a631 GIT binary patch literal 2758 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 literal 0 HcmV?d00001 diff --git a/basic/step05.cpp b/basic/step05.cpp index c23a644..6041d20 100644 --- a/basic/step05.cpp +++ b/basic/step05.cpp @@ -8,6 +8,7 @@ * Fundera på: * - Vad är skillnaden här jämfört med förra? * - Hur påverkas hastigheten av olika hastighet på programmet? + * - Hur fungerar detta med avseende på om programmet har fokus eller ej? */ diff --git a/basic/step06.cpp b/basic/step06.cpp index 976c26b..32a3841 100644 --- a/basic/step06.cpp +++ b/basic/step06.cpp @@ -57,7 +57,7 @@ int main() { auto delta = clock.restart(); { - float distance = 250.0f * (delta.asMicroseconds() / 1000000.0f); + float distance = 250.0f * delta.asSeconds(); location += direction * distance; } diff --git a/basic/step07.cpp b/basic/step07.cpp new file mode 100644 index 0000000..c9bfd79 --- /dev/null +++ b/basic/step07.cpp @@ -0,0 +1,120 @@ +#include <SFML/Graphics.hpp> +#include "point.h" +#include "standard.h" + +/** + * Steg 7: Alternativ hantering av tangentbordsinmatning. + * + * Fundera på: + * - Vad är fördelar och nackdelar gentemot förra lösningen? + * - Finns det problem med den här lösningen? + */ + + +const size_t width = 1024; +const size_t height = 768; + + +class Key_State { +public: + Key_State() + : up{false}, + down{false}, + left{false}, + right{false} + {} + + void onKey(sf::Keyboard::Key key, bool pressed) { + switch (key) { + case sf::Keyboard::W: + case sf::Keyboard::Up: + up = pressed; + break; + case sf::Keyboard::S: + case sf::Keyboard::Down: + down = pressed; + break; + case sf::Keyboard::A: + case sf::Keyboard::Left: + left = pressed; + break; + case sf::Keyboard::D: + case sf::Keyboard::Right: + right = pressed; + break; + default: + break; + } + } + + sf::Vector2f direction() const { + sf::Vector2f result; + if (up) + result.y -= 1; + if (down) + result.y += 1; + if (left) + result.x -= 1; + if (right) + result.x += 1; + return normalize(result); + } + +private: + bool up; + bool down; + bool left; + bool right; +}; + + +int main() { + sf::RenderWindow window{sf::VideoMode{width, height}, "Demo"}; + window.setKeyRepeatEnabled(false); + window.setVerticalSyncEnabled(true); + + sf::CircleShape circle{40}; + sf::Vector2f location{300, 300}; + + sf::Clock clock; + + Key_State keys; + + bool quit = false; + while (!quit) { + sf::Event event; + while (window.pollEvent(event)) { + switch (event.type) { + case sf::Event::Closed: + quit = true; + break; + case sf::Event::KeyPressed: + keys.onKey(event.key.code, true); + break; + case sf::Event::KeyReleased: + keys.onKey(event.key.code, false); + break; + default: + break; + } + } + + if (quit) + break; + + sf::Vector2f direction = keys.direction(); + + auto delta = clock.restart(); + { + float distance = 250.0f * delta.asSeconds(); + location += direction * distance; + } + + window.clear(); + circle.setPosition(location); + window.draw(circle); + window.display(); + } + + return 0; +} diff --git a/basic/step08.cpp b/basic/step08.cpp new file mode 100644 index 0000000..5a99a78 --- /dev/null +++ b/basic/step08.cpp @@ -0,0 +1,74 @@ +#include <SFML/Graphics.hpp> +#include "point.h" +#include "standard.h" + +/** + * Steg 8: Använda texturer. + */ + + +const size_t width = 1024; +const size_t height = 768; + +sf::Vector2f find_direction() { + sf::Vector2f direction; + if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) || sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) + direction.y -= 1; + if (sf::Keyboard::isKeyPressed(sf::Keyboard::S) || sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) + direction.y += 1; + if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) || sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) + direction.x -= 1; + if (sf::Keyboard::isKeyPressed(sf::Keyboard::D) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) + direction.x += 1; + + return normalize(direction); +} + +int main() { + sf::RenderWindow window{sf::VideoMode{width, height}, "Demo"}; + window.setKeyRepeatEnabled(false); + window.setVerticalSyncEnabled(true); + + sf::Texture texture; + texture.loadFromFile("player.png"); + + sf::Vector2f textureSize{texture.getSize()}; + sf::RectangleShape player{textureSize}; + player.setTexture(&texture); + player.setOrigin(textureSize / 2.0f); + sf::Vector2f location{300, 300}; + + sf::Clock clock; + + bool quit = false; + while (!quit) { + sf::Event event; + while (window.pollEvent(event)) { + switch (event.type) { + case sf::Event::Closed: + quit = true; + break; + default: + break; + } + } + + if (quit) + break; + + sf::Vector2f direction = find_direction(); + + auto delta = clock.restart(); + { + float distance = 250.0f * delta.asSeconds(); + location += direction * distance; + } + + window.clear(); + player.setPosition(location); + window.draw(player); + window.display(); + } + + return 0; +} -- GitLab