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 |
b2PolygonDef shapeDef; shapeDef.vertexCount = iCount; shapeDef.density = fDensity; shapeDef.restitution = fRestitution; shapeDef.friction = fFriction; shapeDef.userData = &shapeDef; // Shape Informationen als UserData! bBody->CreateShape(&shapeDef); |
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 |
void Game::CGeometry::RotateForms( double fRotation, Core::CVector vPos ) { for ( set<CForm *>::iterator it = sForms.begin(); it != sForms.end(); ++it ) { for ( b2Shape *ShapeList = (*it)->GetBody()->GetShapeList(); ShapeList; ShapeList = ShapeList->GetNext() ) { if( ShapeList->GetType() == e_polygonShape ) { b2PolygonDef* data = (b2PolygonDef*)ShapeList->GetUserData(); for( unsigned int i = 0; i < data->vertexCount; i++ ) { data->vertices[i].x -= vPos.X; data->vertices[i].y -= vPos.Y; data->vertices[i].x = data->vertices[i].x * cos( fRotation ) - data->vertices[i].y * sin( fRotation ); data->vertices[i].y = data->vertices[i].y * cos( fRotation ) + data->vertices[i].x * sin( fRotation ); data->vertices[i].x += vPos.X; data->vertices[i].y += vPos.Y; } } } } } |
C-/C++-Quelltext |
|
1 |
b2PolygonDef* data = (b2PolygonDef*)ShapeList->GetUserData(); |
Zitat von »"fred2507"«
wenn dus hinkriegst hier die welt zu rotieren wäre das interessant und meines wissens eine noch nicht da gewesene spielerfahrung. viel erfolg damit
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
vec2 pivot; float rot; for(int i = 0; i < num_vertices; ++i) { vec2 diff = vertices[i].pos - pivot; vec2 len = sqrt(diff.x * diff.x + diff.y * diff.y; vertices[i].pos.x += cos(rot) * len; vertices[i].pos.y += sin(rot) * len; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void Game::CGeometry::RotateForms( double fRotation, b2Vec2 vPos ) { for ( set<CForm *>::iterator it = sForms.begin(); it != sForms.end(); ++it ) { //Abstand vom Mittelpunkt zum Verschiebungspunkt b2Vec2 vdistance( (*it)->GetPosition().X - vPos.x, (*it)->GetPosition().Y - vPos.y ); b2Vec2 vNewPos( cos( fRotation ) * vdistance.x - sin( fRotation ) * vdistance.y , sin( fRotation ) * vdistance.x + cos( fRotation ) * vdistance.y ); //Verschiebung vNewPos += vPos; //In Box2D Koordinaten umrechnen vNewPos *= Game::COORDFACTOR; (*it)->GetBody()->SetXForm( vNewPos , fRotation ); } } |
idontknow
unregistriert
Werbeanzeige