Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 |
class Entity{public: sf::RectangleShape rect; sf::Texture texture; sf::Sprite sprite; sf::Text text; Entity(); private:protected:}; |
C-/C++-Quelltext |
|
1 2 3 |
class Player : public Entity{public: enum Direction { DOWN, LEFT, RIGHT, UP }; sf::Vector2i source; int attackDamage = 5; float playerMovementSpeed = 2; bool reverseAnimation = false; bool isMoving = false; sf::Time tempClock; Animation playerAnim; Player(); void update(sf::Time elapsed);}; |
C-/C++-Quelltext |
|
1 2 3 4 5 |
Player::Player(){ rect.setSize(sf::Vector2f(32, 32)); rect.setPosition(400, 200); rect.setFillColor(sf::Color::Blue); source.x = 0; source.y = DOWN; if (!texture.loadFromFile("Resources/character_spritesheet.png")) cout << "Das Bild \"character_spritesheet.png\" konnte nicht geladen werden!" << endl; sprite.setTexture(texture); sprite.setTextureRect(sf::IntRect(0, 0, 32, 32)); sprite.setPosition(400, 300); Player::playerAnim.init(texture, sprite, sf::Vector2i(32, 32), 0.2f);} |
C-/C++-Quelltext |
|
1 |
window.draw(player.sprite); |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
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 |
int main() { // Clock sf::Clock clock; sf::Time elapsed; sf::RenderWindow window(sf::VideoMode(800, 600), "Simple Dungeon Crawler", sf::Style::Close | sf::Style::Titlebar); window.setFramerateLimit(120); sf::Image icon; if (!icon.loadFromFile("Resources/skull.jpg")) cout << "Das Bild \"skull.jpg\" konnte nicht geladen werden!" << endl; window.setIcon(icon.getSize().x, icon.getSize().y, icon.getPixelsPtr()); // Start the clock clock.restart(); // Create Player Player player; while (window.isOpen()) { elapsed = clock.restart(); sf::Event event; while (window.pollEvent(event)) { switch (event.type) { case sf::Event::Closed: window.close(); break; } } // Update Player player.update(elapsed); // draw everything window.clear(sf::Color::Black); window.draw(player.sprite); window.display(); } return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#pragma once #include <SFML/Graphics.hpp> class Entity { public: sf::RectangleShape rect; sf::Texture texture; sf::Sprite sprite; sf::Text text; private: protected: }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#pragma once #include <SFML\Graphics.hpp> #include "Entity.h" #include "Animation.h" class Player : public Entity { public: enum Direction { DOWN, LEFT, RIGHT, UP }; sf::Vector2i source; int attackDamage = 5; float playerMovementSpeed = 2; bool reverseAnimation = false; bool isMoving = false; sf::Time tempClock; Animation playerAnim; Player(); void update(sf::Time elapsed); }; |
C-/C++-Quelltext |
|
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 |
#include <SFML\Graphics.hpp> #include <iostream> #include "Player.h" #include "Animation.h" using namespace std; Player::Player() { rect.setSize(sf::Vector2f(32, 32)); rect.setPosition(400, 200); rect.setFillColor(sf::Color::Blue); source.x = 0; source.y = DOWN; if (!texture.loadFromFile("Resources/character_spritesheet.png")) cout << "Das Bild \"character_spritesheet.png\" konnte nicht geladen werden!" << endl; sprite.setTexture(texture); sprite.setTextureRect(sf::IntRect(0, 0, 32, 32)); sprite.setPosition(400, 300); Player::playerAnim.init(texture, sprite, sf::Vector2i(32, 32), 0.2f); } void Player::update(sf::Time elapsed) { sprite.setPosition(rect.getPosition()); // player movement... } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#pragma once #include <SFML\Graphics.hpp> class Animation { public: // Variablen sf::Texture textureSheet; sf::Sprite sprite; sf::Vector2i spriteSize; sf::Time tempClock; float animSpeed; int counter; bool reverseAnimation; // Konstruktoren Animation(); Animation(sf::Texture textureSheet, sf::Sprite sprite, sf::Vector2i spriteSize, float animSpeed); // Funktionen void init(sf::Texture textureSheet, sf::Sprite sprite, sf::Vector2i spriteSize, float animSpeed); sf::Sprite updateSprite(sf::Sprite sprite, int line, sf::Time elapsed); }; |
C-/C++-Quelltext |
|
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 |
#include "Animation.h" Animation::Animation() { } Animation::Animation(sf::Texture textureSheet, sf::Sprite sprite, sf::Vector2i spriteSize, float animSpeed) { Animation::textureSheet = textureSheet; Animation::sprite = sprite; Animation::spriteSize.x = spriteSize.x; Animation::spriteSize.y = spriteSize.y; Animation::animSpeed = animSpeed; reverseAnimation = false; counter = 0; } void Animation::init(sf::Texture textureSheet, sf::Sprite sprite, sf::Vector2i spriteSize, float animSpeed) { Animation::textureSheet = textureSheet; Animation::sprite = sprite; Animation::spriteSize.x = spriteSize.x; Animation::spriteSize.y = spriteSize.y; Animation::animSpeed = animSpeed; reverseAnimation = false; counter = 0; } sf::Sprite Animation::updateSprite(sf::Sprite sprite, int line, sf::Time elapsed) { tempClock += elapsed; // slow down animation + reverse it if (tempClock.asSeconds() >= animSpeed) { if (reverseAnimation) counter--; else counter++; tempClock = tempClock.Zero; } if (counter * spriteSize.x >= textureSheet.getSize().x - spriteSize.x) reverseAnimation = true; if (counter <= 0) reverseAnimation = false; Animation::sprite = sprite; sprite.setTextureRect(sf::IntRect(counter * Animation::spriteSize.x, line * Animation::spriteSize.y, Animation::spriteSize.x, Animation::spriteSize.y)); return sprite; } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
sf::Sprite Animation::updateSprite(sf::Sprite sprite, int line, sf::Time elapsed) { ... Animation::sprite = sprite; sprite.setTextureRect(sf::IntRect(counter * Animation::spriteSize.x, line * Animation::spriteSize.y, Animation::spriteSize.x, Animation::spriteSize.y)); return sprite; } |
Da hast Du auf jeden Fall wieder das Problem, dass Texturen kopiert werden, weil Du sie nicht als Referenz oder Pointer übergibst.
C-/C++-Quelltext |
|
1 |
sprite = playerAnim.updateSprite(sprite, source.y, elapsed);
|
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lardos« (01.11.2015, 17:48)
Werbeanzeige