Du bist nicht angemeldet.

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

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

1

09.04.2012, 17:42

Box2D Funktion übernimmt keine 2 Argumente?

Hallo,

Ich habe ein Programm mit sfml 2 und Box2D geschrieben. Es funktioniert einwandfrei. Dann habe ich eben ein neues Projekt geöffnet, wieder alle nötigen Include- und Bibliothekdateien angegeben und den Code aus dem vorherigen Projekt kopiert und in das neue eingefügt. Jetzt sagt mir der Compiler allerdings folgendes:


Quellcode

1
2
3
4
1>------ Erstellen gestartet: Projekt: Box2D_bouncing_ball, Konfiguration: Debug Win32 ------
1>  main.cpp
1>c:\users\luca\documents\visual studio 2010\projects\box2d_bouncing_ball\box2d_bouncing_ball\main.cpp(49): error C2661: 'b2World::b2World': Keine überladene Funktion akzeptiert 2 Argumente
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Ich habe nocheinmal step by step alle Pfade die ich angegeben habe überpfrüft und mit den Pfaden des anderen Projekts verglichen. Mir sind keine Unterschiede aufgefallen. Ich wundere mich nun, warum ich in meinem neuen Projekt keine 2 Argumente übergeben darf?!

Gruß,
Luca

FSA

Community-Fossil

  • Private Nachricht senden

2

09.04.2012, 17:59

Code?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

3

09.04.2012, 18:06

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
// SFML 2 specific headers required
#include <SFML\Graphics.hpp>

// Box2D specific header required
#include <Box2D\Box2D.h>

// Other headers required
#include <iostream>

int main ()
{
    // Create a SFML window
    sf::RenderWindow GameWindow(sf::VideoMode(800, 600, 32), "SFML and Box2D Physiks");

    // Set the window position
    GameWindow.setPosition(sf::Vector2i(55, 174));

    // Create the SFML event handler
    sf::Event Event;

    // Create a SFML shape with a Rectangle
    sf::RectangleShape rect;
    rect.setSize(sf::Vector2f(100, 50));
    rect.setPosition(0, 0);
    rect.setFillColor(sf::Color(127, 0, 0, 255));

    // Create the image buffer
    sf::Texture Image;
    if(!Image.loadFromFile("Block.png"))
        return 1;

    // Create SFML sprite
    sf::Sprite Block;

    // Set the sprites Texture
    Block.setTexture(Image);

    // Set the sprites position
    Block.setPosition(400, 400);

    // Initalizate Box2D
    // Creating a Box2D world

    // Set the gravity
    b2Vec2 gravity(0.0f, -10.0f);
    bool doSleep = true;

    // Create new world object
    b2World world(gravity, doSleep);

    // Create new ground body
    b2BodyDef groundBodyDef;
    groundBodyDef.position.Set(0.0f, -10.0f);

    b2Body* groundBody = world.CreateBody(&groundBodyDef);

    b2PolygonShape groundBox;
    groundBox.SetAsBox(50.0f, 10.0f);

    groundBody->CreateFixture(&groundBox, 0.0f);

    // Creating a dynamic body
    b2BodyDef bodyDef;
    bodyDef.type = b2_dynamicBody;
    bodyDef.position.Set(0.0f, 4.0f);
    b2Body* body = world.CreateBody(&bodyDef);

    // attach polygon shape
    b2PolygonShape dynamicBox;
    dynamicBox.SetAsBox(1.0f, 1.0f);

    // Fixture definition
    b2FixtureDef fixtureDef;
    fixtureDef.shape = &dynamicBox;
    fixtureDef.density = 1.0f;
    fixtureDef.friction = 0.3f;
    body->CreateFixture(&fixtureDef);

    // Box2D simulating
    // initializate the time steps
    float32 timeStep = 1.0f / 60.0f;
    int32 velocityIterations = 6;
    int32 positionIterations = 2;

    // Game loop
    while(GameWindow.isOpen())
    {
        // Event handler loop
        while(GameWindow.pollEvent(Event))
        {
            // Box2D simulationsloop
            for (int32 i = 0; i < 60; ++i)
            {
                world.Step(timeStep, velocityIterations, positionIterations);
                b2Vec2 position = body->GetPosition();
                float32 angle = body->GetAngle();
                printf("%4.2f %4.2 %4.2\n", position.x, position.y, angle);
            }

            switch(Event.type)
            {
            case::sf::Event::Closed:
                std::cout << "Window was closed." << std::endl;
                GameWindow.close();
                break;
            default:
                break;
            }
        }

        // Clear the Game Window
        GameWindow.clear(sf::Color(0, 255, 255));
        GameWindow.display();
        
    }

    return 0;
}

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

4

09.04.2012, 18:55

Der Konstruktor der b2World Klasse hat nunmal nur einen Parameter, nämlich den Vektor für die Gravitation...

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

5

09.04.2012, 20:34

Ja, dass habe ich ja auch gedacht. Aber ich habe dasselbe Programm (copy & paste) mit 2 Parametern. Und da gibt es keinen Fehler. Es funktioniert auch soweit ohne den 2ten Parameter, aber ich verstehe nicht warum es bei dem einen Programm geht um bei dem selben Programm nicht...

Sp3iky

Treue Seele

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

6

09.04.2012, 20:43

Verschiedene Projektkonfigurationen vielleicht.

Hast du unterschiedliche Versionen von Box2D auf dem Rechner? Ich gaube die Anzahl der Parameter hat sich im Laufe der Zeit geändert.

7

09.04.2012, 21:13

Jop, soweit ich weiß, wurde die Parameteranzahl wie Sp3iky irgendwann auf den Gravitationsvektor reduziert.
Vielleicht hast du in einem Projekt noch andere Includes, welche auch Box2D beinhalten oder du hast Box2D im Projektordner.

Von alleine ändert sich da eigentlich nichts.

Simon

8

09.04.2012, 22:41

b2World::b2World(const b2Vec2 & gravity)

Construct a world object.
Parameters: gravity the world gravity vector.

Werbeanzeige