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
Quellcode |
|
1 |
std::vector<unsigned int> Map1::getMap() const { return boost::assign::list_of<unsigned int> ( 1)( 0)( 0)( 0)( 0)( 0)( 1)( 1)( 1)( 1)( 1)( 1)( 1)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 1) ( 1)( 0)( 0)( 0)( 0)( 0)( 1)( 0)( 0)( 0)( 0)( 0)( 1)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 0)( 1) ( 1).... |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
#include "Units.h"#include "Map.h" Units::Units() { bodyTexture.SetSmooth(true); speedY = 0.f; speedX = 0.f; //SetOrigin(0.f, bodySprite.GetSize().y);}Units::~Units() {} void Units::Render(sf::RenderTarget& target, sf::Renderer& renderer) const { target.Draw(bodySprite); // Zeichnet Player } void Units::timeUpdate(std::vector<unsigned int> map, int unsigned mapWidth) { Run(map, mapWidth);} void Units::Run(std::vector<unsigned int> map, int unsigned mapWidth) { // Pro Frame sf::Vector2i lbCorner; sf::Vector2i rbCorner; sf::Vector2i ltCorner; sf::Vector2i rtCorner; // Ecken Definieren die Geprüft werden müssen lbCorner.x = GetPosition().x / Map::SCALE; lbCorner.y = (GetPosition().y + bodySprite.GetSize().y) / Map::SCALE; rbCorner.x = (GetPosition().x + bodySprite.GetSize().x) / Map::SCALE; rbCorner.y = (GetPosition().y + bodySprite.GetSize().y) / Map::SCALE; ltCorner.x = GetPosition().x / Map::SCALE; ltCorner.y = GetPosition().y / Map::SCALE; rtCorner.x = rbCorner.x; rtCorner.y = ltCorner.y; // Finde Maixmale Positionen float maxLeft = 0.f; float maxRight = mapWidth*Map::SCALE; float maxTop = 0.f; float maxBottom = (map.size()/mapWidth)*Map::SCALE; // Links Kollesion if (map[lbCorner.y*mapWidth + (lbCorner.x-1)] > 0 || map[ltCorner.y*mapWidth + (ltCorner.x-1)] > 0) { maxLeft = lbCorner.x*Map::SCALE; // Ziehe von Aktuellem Feld 1 ab, -> in linken feld drin } // Rechts Kollesion if (map[rbCorner.y*mapWidth + (rbCorner.x+1)] > 0 || map[rtCorner.y*mapWidth + (rtCorner.x+1)] > 0) { maxRight = ((rbCorner.x+1)*Map::SCALE)-0.1f; // Ende dieses Feldes ist Maximum } // Ziehe die Spieler Größe ab, damit die Rechte Ecke nicht drüber kommt maxRight = maxRight - bodySprite.GetSize().x; // Unten Kollesion if (map[(lbCorner.y+1)*mapWidth + lbCorner.x] > 0 || map[(rbCorner.y+1)*mapWidth + rbCorner.x] > 0) { maxBottom = (lbCorner.y+1)*Map::SCALE -1.f; // Addiere 1 zum anfang nächstes feld, ziehe 0.1f ab um ende dieses feld } maxBottom = maxBottom - bodySprite.GetSize().y; // Oben Kollesion if (map[(ltCorner.y-1)*mapWidth + ltCorner.x] > 0 || map[(rbCorner.y-1)*mapWidth + rbCorner.x] > 0) { maxTop = (lbCorner.y*Map::SCALE); } // Addiere KörperGröße damit nicht drüber geht// maxTop = maxTop + bodySprite.GetSize().x; if (isRunLeft()) { // Prüfe Links bodySprite.FlipX(false); SetPosition(std::max(GetPosition().x - 2.f, maxLeft), GetPosition().y); } else if (isRunRight()) { // Prüfe Rechts bodySprite.FlipX(true); SetPosition(std::min(GetPosition().x + 2.f, maxRight), GetPosition().y); } if (isJump()) { // Tiefer geht an der Stelle nicht. if (std::min(GetPosition().y, maxBottom) == maxBottom) { speedY = 5.f; } } // Gravitation // Verlangsamt Geschwindigkeit nach oben pro Frame speedY = std::max(speedY - 0.2f, -5.f); if (speedY > 0) { // Aktuell nach oben SetPosition(GetPosition().x, std::max(GetPosition().y - speedY, maxTop)); } else if (speedY < 0) { // Aktuell nach unten // Ist Land in sicht? SetPosition(GetPosition().x, std::min(GetPosition().y - speedY, maxBottom)); } } |
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
(SFML 2, C++)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MyFrosch« (26.07.2012, 22:54)
Werbeanzeige