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 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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
#include <SFML/Graphics.hpp> #include "collision.h" #include <sstream> #include <list> #include <string> #include <iostream> #include <fstream> using namespace std; template<class T> inline std::string toStr(T x) { std::stringstream type; type << x; return type.str(); }; class Tile { public: float X, Y, Rotation; bool Collision; sf::Sprite sTile; sf::Image iTile; Tile::Tile(std::string Path, float X, float Y, float Rotation, bool bCollision){ iTile.LoadFromFile(Path); std::cout << Path << std::endl; iTile.SetSmooth(false); sTile.SetImage(iTile); sTile.SetRotation(Rotation); sTile.Move(X,Y); sTile.SetCenter(16,16); Collision = bCollision; } }; float rad2deg(float x){ return x*360.0f/(2.0f*3.14f); } std::list<Tile> Tiles; int main(){ sf::RenderWindow App(sf::VideoMode(800, 600, 32), "Square Fighter"); App.UseVerticalSync(true); Tile TempTile1("./data/sand.png",32.0f,32.0f,0.0f,false); Tile TempTile2("./data/sand.png",64.0f,32.0f,0.0f,false); Tile TempTile3("./data/sand.png",96.0f,32.0f,0.0f,false); Tile TempTile4("./data/sand.png",128.0f,32.0f,0.0f,false); Tile TempTile5("./data/sand.png",32.0f,64.0f,0.0f,false); Tile TempTile6("./data/sand.png",64.0f,64.0f,0.0f,false); Tile TempTile7("./data/sand.png",96.0f,64.0f,0.0f,false); Tile TempTile8("./data/sand.png",128.0f,64.0f,0.0f,false); Tiles.push_back(TempTile1); Tiles.push_back(TempTile2); Tiles.push_back(TempTile3); Tiles.push_back(TempTile4); Tiles.push_back(TempTile5); Tiles.push_back(TempTile6); Tiles.push_back(TempTile7); Tiles.push_back(TempTile8); Tile TempTile9("./data/wall.png",32.0f,0.0f,0.0f,true); Tile TempTile10("./data/wall.png",64.0f,0.0f,0.0f,true); Tile TempTile11("./data/wall.png",96.0f,0.0f,0.0f,true); Tile TempTile12("./data/wall.png",128.0f,0.0f,0.0f,true); Tile TempTile13("./data/wall.png",32.0f,96.0f,180.0f,true); Tile TempTile14("./data/wall.png",64.0f,96.0f,180.0f,true); Tile TempTile15("./data/wall.png",96.0f,96.0f,180.0f,true); Tile TempTile16("./data/wall.png",128.0f,96.0f,180.0f,true); Tile TempTile17("./data/wall.png",0.0f,32.0f,90.0f,true); Tile TempTile18("./data/wall.png",0.0f,64.0f,90.0f,true); Tile TempTile19("./data/wall.png",160.0f,32.0f,270.0f,true); Tile TempTile20("./data/wall.png",160.0f,64.0f,270.0f,true); Tiles.push_back(TempTile9); Tiles.push_back(TempTile10); Tiles.push_back(TempTile11); Tiles.push_back(TempTile12); Tiles.push_back(TempTile13); Tiles.push_back(TempTile14); Tiles.push_back(TempTile15); Tiles.push_back(TempTile16); Tiles.push_back(TempTile17); Tiles.push_back(TempTile18); Tiles.push_back(TempTile19); Tiles.push_back(TempTile20); Tile TempTile21("./data/walledge.png",0.0f,0.0f,90.0f,true); Tile TempTile22("./data/walledge.png",160.0f,0.0f,0.0f,true); Tile TempTile23("./data/walledge.png",160.0f,96.0f,270.0f,true); Tile TempTile24("./data/walledge.png",0.0f,96.0f,180.0f,true); Tiles.push_back(TempTile21); Tiles.push_back(TempTile22); Tiles.push_back(TempTile23); Tiles.push_back(TempTile24); sf::Image iPlayer; iPlayer.LoadFromFile("./data/player-both-u.png"); sf::Sprite sPlayer(iPlayer); sPlayer.SetCenter(16.0f,16.0f); sPlayer.Move(64.0f,32.0f); sf::Vector2f Center(0, 0); sf::Vector2f HalfSize(400, 300); sf::View Camera(Center, HalfSize); App.SetView(Camera); sf::Font Font; Font.LoadFromFile("arial.ttf", 16); sf::String Text("Hello", Font, 16); Text.SetPosition(-100.0f,-100.0f); std::string Do = "0"; while (App.IsOpened()){ sf::Event Event; while (App.GetEvent(Event)){ if (Event.Type == sf::Event::Closed){ App.Close(); } } float ElapsedTime = App.GetFrameTime(); Do = ""; //Player Bewegung if(App.GetInput().IsKeyDown(sf::Key::A)){ sPlayer.Move(-100 * ElapsedTime, 0); Do += "1";} if(App.GetInput().IsKeyDown(sf::Key::D)){ sPlayer.Move( 100 * ElapsedTime, 0); Do += "2";} if(App.GetInput().IsKeyDown(sf::Key::W)){ sPlayer.Move(0, -100 * ElapsedTime); Do += "3";} if(App.GetInput().IsKeyDown(sf::Key::S)){ sPlayer.Move(0, 100 * ElapsedTime); Do += "4";} if((!App.GetInput().IsKeyDown(sf::Key::A)) && (!App.GetInput().IsKeyDown(sf::Key::D)) && (!App.GetInput().IsKeyDown(sf::Key::W)) && (!App.GetInput().IsKeyDown(sf::Key::S))){ Do = ""; } //Player Blickrichtung Maus berechnung sf::Vector2f Diff, MausPos, SpielerPos; MausPos = App.ConvertCoords(App.GetInput().GetMouseX(),App.GetInput().GetMouseY()); SpielerPos = sPlayer.GetPosition(); float Grad = rad2deg(atan2((MausPos.x-SpielerPos.x),(MausPos.y-SpielerPos.y))); sPlayer.SetRotation(Grad); //Camera if (App.GetInput().IsKeyDown(sf::Key::Left)) { Camera.Move(-100 * ElapsedTime, 0);} if (App.GetInput().IsKeyDown(sf::Key::Right)) { Camera.Move( 100 * ElapsedTime, 0);} if (App.GetInput().IsKeyDown(sf::Key::Up)) { Camera.Move(0, -100 * ElapsedTime);} if (App.GetInput().IsKeyDown(sf::Key::Down)) { Camera.Move(0, 100 * ElapsedTime);} App.Clear(); //Draw Alle Tiles, Text &' Player. for(std::list<Tile>::iterator iT = Tiles.begin(); iT != Tiles.end(); ++iT){ App.Draw((*iT).sTile); if((*iT).Collision == true){ if(Collision::PixelPerfectTest(sPlayer,(*iT).sTile)){ if(Do == "1"){ sPlayer.Move(100 * ElapsedTime, 0); }else if(Do == "2"){ sPlayer.Move(-100 * ElapsedTime, 0); }else if(Do == "3"){ sPlayer.Move(0, 100 * ElapsedTime); }else if(Do == "4"){ sPlayer.Move(0, -100 * ElapsedTime); }else if(Do == "13"){ sPlayer.Move(100 * ElapsedTime, 0); sPlayer.Move(0, 100 * ElapsedTime); }else if(Do == "23"){ sPlayer.Move(-100 * ElapsedTime, 0); sPlayer.Move(0, 100 * ElapsedTime); }else if(Do == "14"){ sPlayer.Move(100 * ElapsedTime, 0); sPlayer.Move(0, -100 * ElapsedTime); }else if(Do == "24"){ sPlayer.Move(-100 * ElapsedTime, 0); sPlayer.Move(0, -100 * ElapsedTime); } } } } Text.SetText(toStr(Do)); App.Draw(Text); App.Draw(sPlayer); App.Display(); } return EXIT_SUCCESS; } |
C-/C++-Quelltext |
|
1 2 3 |
While(!asleep){ sheep++; } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AyJay« (03.10.2011, 20:01)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Werwofl« (04.10.2011, 12:29)
C-/C++-Quelltext |
|
1 |
if(Collision::PixelPerfectTest(sPlayer,(*iT).sTile)) |
C-/C++-Quelltext |
|
1 2 3 |
While(!asleep){ sheep++; } |
Community-Fossil
C-/C++-Quelltext |
|
1 2 3 |
While(!asleep){ sheep++; } |
Community-Fossil
Was soll ich denn sonst benutzen als eine List ?
Und wieso soll ich das nicht durchlaufen dann weiss ich ja garnicht ob es Colidiert ? oô
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (04.10.2011, 18:39)
Zitat
WASD die steuerung eigendlich sollte er bei S & D nach rechts dann gehen oder nicht ?
C-/C++-Quelltext |
|
1 2 3 |
While(!asleep){ sheep++; } |
Auf welchem er steht würde ich ja hinbekommen und mit Vector da hast du recht und stimmt du hast es schon gesagt.
Doch wie soll mir das bei dem Problem helfen ?
//Edit
Und ich muss ja trotzdem dem ganzen vector durchlaufen um alles zu Drawn?
C-/C++-Quelltext |
|
1 |
Tile[x][y-1].istBegehbar(); |
Community-Fossil
Du könntest auch einfach die alte Position des Spielers speichern, wenn du ihn später wieder zurücksetzen willst.
Werbeanzeige