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 |
loat CPlane::Intersect(const CVertex pos) { v0 -= pos; v1 -= pos; v2 -= pos; v3 -= pos; float mag0(v0.Magnitude()), mag1(v1.Magnitude()), mag2(v2.Magnitude()), mag3(v3.Magnitude()); return acosf(v0.Dot(v1) / (mag0 * mag3)) + acosf(v1.Dot(v2) / (mag1 * mag2)) + acosf(v2.Dot(v3) / (mag2 * mag1)) + acosf(v3.Dot(v0) / (mag3 * mag0)); } |
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 |
#include <SFML/System.hpp> #include <SFML/Graphics.hpp> #include <iostream> #include <math.h> #include <time.h> #define PI 3.14159265 using namespace std; using namespace sf; int main(int argc, char *argv[]) { const int xScreen = 1200; const int yScreen = 2600; sf::RenderWindow window(sf::VideoMode(xScreen, yScreen), "Hello SFML"); Vector2f wallSize(Vector2f(400, 400)); Vector2f playerSize(Vector2f(90, 90)); //Joystick Kreis CircleShape circle; circle.setRadius(120); circle.setFillColor(Color(210, 210, 240)); circle.setOrigin(circle.getRadius(), circle.getRadius()); circle.setPosition(Vector2f (325, 350)); // Joytsick Unterfläche CircleShape backCircle; backCircle.setRadius(180); backCircle.setFillColor(Color( 180, 180, 180));backCircle.setOrigin(backCircle.getRadius(), backCircle.getRadius()); backCircle.setPosition(Vector2f (325, 350)); //Player RectangleShape player; player.setSize(playerSize); player.setFillColor(Color(160, 190, 190)); player.setPosition(Vector2f(xScreen/2, yScreen/2)); IntRect plrRect = player.getTextureRect(); player.setOrigin(plrRect.width/2, plrRect.height/2); //walls RectangleShape wall; std::vector<RectangleShape> walls(10u); walls.push_back(wall); // verschiedenes Vector2f positionCircle; Vector2f positionbackCircle; float speed; float radiusCircle; float radiusbackCircle; float distance, radii, angle; Vector2f posVec; while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)); // joystick Sachen positionCircle= circle.getPosition(); positionbackCircle = backCircle.getPosition(); radiusCircle = circle.getRadius(); radiusbackCircle = backCircle.getRadius(); FloatRect cRect = circle.getGlobalBounds(); FloatRect bcRect = backCircle.getGlobalBounds(); // Touch Screen World Einstellungen Vector2i currPos = Touch::getPosition(0, window); Vector2f worldPos = window.mapPixelToCoords(currPos); //Joystick Touch if(cRect.contains(worldPos)){ circle.setPosition(circle.getPosition().x, worldPos.x); circle.setPosition(circle.getPosition().y, worldPos.y); player.move(posVec.x * 0.2, posVec.y * 0.2); } // joystick bleibt im Unterkreis posVec.x = positionCircle.x - positionbackCircle.x; posVec.y = positionCircle.y - positionbackCircle.y; distance = sqrt((posVec.x * posVec.x) + (posVec.y * posVec.y)); radii = radiusCircle + radiusbackCircle; if( distance <= radii){ circle.setPosition(circle.getPosition().x - posVec.x / 180 * 120 , circle.getPosition().y - posVec.y / 180 * 120); } window.clear(sf::Color(120, 100, 145)); player.setFillColor(Color::Black); //Wall Einstellungen for(int i = 0; i < walls.size(); i++){ FloatRect wallBounds = walls[i].getGlobalBounds(); FloatRect playerBounds = player.getGlobalBounds(); Vector2f plrVecPos = player.getPosition(); Vector2f wallVecPos = walls[i].getPosition(); // walls erstellen walls[1].setPosition(Vector2f(100, 800)); walls[1].setFillColor(Color::Blue); walls[1].setSize(wallSize); walls[2].setPosition(Vector2f(100, 1500)); walls[2].setFillColor(Color::Yellow); walls[2].setSize(wallSize); walls[3].setPosition(Vector2f(700, 1500)); walls[3].setFillColor(Color::Red); walls[3].setSize(wallSize); //Wenn ded Spieler die Wand berührt if(playerBounds.intersects(wallBounds)){ // hier komme ich nicht weiter, der Spieler soll nicht durch die Wand } for (auto& wall : walls){ window.draw(walls[i]); } } window.draw(backCircle); window.draw(circle); window.draw(player); window.display(); } } |
Administrator
Werbeanzeige