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

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

1

10.07.2013, 13:20

[SFML] Kollision auf einer Tile-Map

Hallo Leute!
Ich schlage mich schon seit ein paar Tagen mit dem Problem rum, dass die Kollision auf meiner Tile-Map nicht funktioniert. Ich habe die Map szs. in zwei Teile eingeteilt. Einmal hab ich die Map an sich, die aus Zahlen wie zB. 3,42, die dann als eine 3 und eine 42 in einem std::vector<std::vector<sf::Vector2f>> namens map gespeichert werden. Die Draw-Funktion sieht dann so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    sf::Sprite tiles(tiletexture); // tiletexture ist ein PNG-File mit der Sammlung von den Texturen der einzelnen Tiles

    for(int i = 0; i < map.size(); i++)
    {
        for(int j = 0; j < map[i].size(); j++)
        {
            if(map[i][j] != sf::Vector2i(-1, -1))
            {
                tiles.setPosition(j * 16 * 2,i * 16 * 2);
                tiles.setTextureRect(sf::IntRect(map[i][j].x * 16,map[i][j].y * 16, 16, 16));
                tiles.setScale(2.0,2.0);
                window.draw(tiles);
            }
        }
    }


Die Tiles sind 32x32 groß. Zur Kollision habe ich dann eine Kollisionsmap, die aus Integern wie 0,1,2,3... besteht. Das hat den Grund, dass Bäume zB. aus ganzen 6 verschiedenen Tiles bestehen, da wäre es zu umständlich, jedem Baum-Teil eine Klasse zu erstellen. Diese Integer werden dann in einem std::vector<std::vector<int>> colmap gespeichert. Die for-Schleife zur Kollisionserkennung sieht dann so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for(int i = 0; i < colmap.size(); i++)
        {
            for(int j = 0; j < colmap[i].size(); j++)
            {
                sf::RectangleShape tile(sf::Vector2f(32,32));
                tile.setPosition(j * 32, i * 32);
                if(player.getSprite().getGlobalBounds().intersects(tile.getGlobalBounds()))
                {
                    if(colmap[i][j] == 1)
                    {
                        player.collision(); // void Player::collision funktioniert so, dass wenn zB. Taste 'A' für links gedrückt wird,
                        break;              // nach rechts 'geschoben' wird.
                    }
                }
            }
        }


Hier hab ich das Problem sehr stark vereinfacht. Vorher hatte ich es so, dass die Vier Ecken vom 32x32 großen Spieler in Integer-Werte umgerechnet werden, undzwar so, dass colmap[oben][links] dem Tile entsprach, auf dem die Ecke links oben vom Spieler lag. Wenn der Integer dann 1 war, wurde, wie hier, eine Kollision ausgelöst. Beides hat jedoch das Selbe Ergebnis: Die Kollision wird erst festgestellt, wenn der Spieler schon drinsteckt. Ich hab schon versucht, die Blöcke um ihn herum festzustellen und dann bool-Variablen, die die Bewegung vom Spieler in eine bestimmte Richtung ermöglichen auf false zu stellen, wenn in der Richtung ein Tile mit Integer-Wert 1 ist. Aber alles endet so wie hier. Immer steckt der Spieler im Tile fest, und wenn er sich dann zB. nach oben bewegt, also 'W' drückt, wird er nach unten aus der Map geschoben, da die Kollision ja immer noch stattfindet. Ich hab da noch viele andere Methoden versucht, aber irgendwie endet es immer so. Achja, wichtig ist es noch zu sagen, dass der Spieler sich unabhängig von den Tiles bewegt und höchstens mit 4 Tiles kollidieren kann.

Danke schonmal!

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

10.07.2013, 14:25

Nur als Tipp: Eine Tilemap zu rendern, indem man ein Sprite einfach nur durch die Gegend verschiebt, ist nicht wirklich die schöne Art. Probier mal das sf::VertexArray. Auf der SFML-Seite gibt es sogar eine TileMap-Klasse als Beispiel, die auf dem Array aufbaut.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

10.07.2013, 14:45

Schon wieder so eine merkwürdige Kollisionsabfrage. Irgendwie wollen sie hier alle Tilemaps benutzen und verstehen nicht was das bringt;) Ich versuchs dir mal zu zeigen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
// es gibt ein 2D Array (von mir aus auch std::vector) von Typ bool mit dem Namen tilemap
// das ganze befindet sich in einer Klasse mit dem Namen Map. tilemap ist eine Membervariable von Map
// die Membervariablen mit dem Namen tileWidth und tileHeight bestimmen die Breite und Höhe eines Tiles. In deinem Fall wäre das 32
// Die Parameter der Funktion sind Koordinaten in Pixeln, nicht in Tilelängen. Also wirkliche Positionsdaten
bool Map::Collides(int x, int y)
{
    return tilemap[x/tileWidth][x/tileWidth];
}

Das ist schon alles um zu prüfen ob der Punkt an Stelle (x, y) mit der Map kollidieren würde. Wenn du jetzt keine Bool-Werte für die Kollision speichern möchtest musst du die Funktion halt ein wenig anpassen. Der Trick mit der Gitterstruktur der Map ist jedoch, nicht für jeden Mist die ganze Karte durchlaufen zu müssen, sondern sich direkt Positionen im Gitter berechnen zu können.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

4

10.07.2013, 17:54

Ich schlage mich schon seit ein paar Tagen mit dem Problem rum, dass die Kollision auf meiner Tile-Map nicht funktioniert. Ich habe die Map szs. in zwei Teile eingeteilt. Einmal hab ich die Map an sich, die aus Zahlen wie zB. 3,42, die dann als eine 3 und eine 42 in einem std::vector<std::vector<sf::Vector2f>> namens map gespeichert werden.
sf::Vector2f ist ein Floating Point Vektor, wenn ich das jetzt aber richtig sehe benutzt du ihn zum Speichern von (Unsigned) Integer werten. Alle Werte die du ihm zuführst werden implizite in Floating Point Zahlen umgewandelt. Beim späteren Vergleich mit (Unsigned) Integer werten kann das zu Problemen führen. sf::Vector2i oder sf::Vector2u könnten angebrachter für deinen Bedarf sein.

Ich hoffe ich hab dir jetzt nichts Falsches geschrieben, ich habe leider grad nur nicht so viel Zeit.

sf::Vector2< T > Class Template Reference
:love: := Go;

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

5

10.07.2013, 19:27

sf::Vector2f ist ein Floating Point Vektor, wenn ich das jetzt aber richtig sehe benutzt du ihn zum Speichern von (Unsigned) Integer werten. Alle Werte die du ihm zuführst werden implizite in Floating Point Zahlen umgewandelt. Beim späteren Vergleich mit (Unsigned) Integer werten kann das zu Problemen führen. sf::Vector2i oder sf::Vector2u könnten angebrachter für deinen Bedarf sein.
Da hast du recht, ist mir auch schon aufgefallen. Aber mehr als eine Warnung im Compiler auszulösen, tut es nicht.
Jetzt aber zum eigentlichen Problem. Ich hab jetzt keine Codeschnipsel parat, weil ich jetzt nicht an meinem Laptop bin, aber ich hab noch, wie Schorsch bereits sagte, eine Klasse für die Map erstellt und die tilemap wieder aus einer Textdatei laden lassen. Da ich aus Einfachheitsgründen an der Collisionmap festhalten will, hab ich auch eine Membervariable std::vector<std::vector<int>> colmap erstellt, die dann die Integer aus einer Textdatei übernimmt. Ich weiß aber immer noch nicht, wie ich das mit der Kollision machen soll. Es ist immer noch das Selbe. Ich konnte auch vorher schon feststellen lassen, mit welchen Tile der Spieler kollidiert und welchen Integer-Wert dieser hat, wenn ich auch zugeben muss, das die Methode von Schorsch viel Platz spart und ich mich jetzt besser in meinem Code zurechtfinden kann :D
Trotzdem, ich kann jetzt feststellen, mit welchen Tiles die vier Ecken des Spielers kollidieren. Je nach dem Integer-Wert, der an der Stelle in der colmap-Membervariable gespeichert ist, kann ich eine Aktion durchführen. Die Aktionen, wie langsamer werden oder so funktionieren, nur das mit der Kollision bleibt ein Problem für mich. Die Kollision wird erst festgestellt, wenn eine Ecke bereits DRINNEN ist, dann wird der Spieler zwar direkt wieder rausgeschoben, aber er kann dann ja sofort wieder rein. Das sieht dann so aus, dass der Spieler hin und her geworfen wird, bis er die Taste loslässt. Ich hab dann noch versucht, festzustellen, ob sich ein solides Tile in der Richtung, in die er sich bewegt, mit dem er noch NICHT kollidiert, befindet. Das würde dann zum Beispiel so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
int Map::Collides(int x, int y)
{
   if(player.getDirection() == 0) // 0 steht für oben, 1 für unten, 2 für links, 3 für rechts
      return colmap[y/tileHeight - 1][x/tileWidth]; // Ich hab X und Y vertauscht, weil es hier um einen std::vector in einem std::vector handelt
   //und das dann für alle Richtungen
}


Wenn sich der Spieler nach oben bewegt und Map::Collides dann Eins ergibt, was bei mir für Kollision steht, dann wird bool moveableUp, was die Bewegung nach oben ermöglicht, auf false gesetzt.
Zumindest in der Theorie.

C-/C++-Quelltext

1
2
3
4
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up) && moveableUp)
{
    player.move(0, speed * time.asMilliSeconds());
}


Der Spieler bewegt sich einfach weiter, auch wenn moveableUp eigentlich vom Programm auf false gesetzt werden sollte. Ich vermute, dass wenn die Schleife erst einmal am Laufen ist, sie nichts mehr stoppen kann :D Ich kann es aber nicht zu einer while-Schleife mit einem break-Befehl machen, falls moveableUp false sein sollte, da das Fenster nicht reagiert, wenn ich bei Bewegungen while-Schleifen mache (Kann mir das jemand erklären?). Keine Ahnung, wieso das mit den bool-Werten nicht funktioniert. Ich hab den Code jetzt wie gesagt leider nicht parat. Oder gehe ich ganz falsch an die Sache ran? Ich hab bisher noch nicht mit TileMaps gearbeitet und das hier hab ich mir so ausgedacht, ich weiß nicht, wie man es eigentlich machen sollte.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

10.07.2013, 22:16

Ohne den Rest vom Code zu sehen kann man wenig zu deinem Problem sagen.
Das Problem mit dem flackern beim raus schieben wird sein, dass du deinen Spieler nicht richtig zurück setzt. Am besten ist, wenn du ihn genau so weit raus schiebst, bis er genau an der Kante steht. Dann wird er jedes mal an die selbe Position geschoben und dein flackern sollte aufhören.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

7

11.07.2013, 12:02

Gut, ich stelle mal den ganzen Code rein, dann kann mir hoffentlich auch weitergeholfen werden. Ich hab jetzt einen neuen Ansatz drin, aber es ist immer noch das Problem mit dem Raus und Rein, der Spieler kann jetzt aber endlich nicht komplett aus der Map raus, es sieht nur unschön aus. Er gleitet aber auch an den Kanten ab, wenn nur eine Ecke von ihm kollidiert.

Map.h:

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
#ifndef Map_h
#define Map_h
#include"player.h"
#include<vector>
#include<SFML/Graphics.hpp>

class Map
{
public:
    Map();
    void setCurrent(unsigned int current){this->current = current;}
    void draw(sf::RenderWindow& window, Player& player);
    void loadmap();
    void loadcolmap();
    int collides(int x, int y){return colmap[x/tilewidth][y/tileheight];}
private:
    unsigned int current;
    sf::Sprite tiles;
    sf::Texture tiletexture;
    int tileheight, tilewidth;
    std::vector<std::vector<sf::Vector2i>> tilemap;
    std::vector<std::vector<int>> colmap;
};

#endif


Map.cpp:

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
#include"Map.h"
#include"player.h"
#include<SFML/Graphics.hpp>
#include<fstream>
#include<cctype>
#include<sstream>

Map::Map()
{
    current = 1;
    tileheight = 32;
    tilewidth = 32;
}

void Map::loadmap()
{
    std::ifstream openfile;
    switch(current)
    {
    case 1:
        openfile.open("map1.txt");
        break;
    }

    tiletexture.loadFromFile("tileset.png");
    tiles.setTexture(tiletexture);
    std::vector<sf::Vector2i> tempmap;

    tilemap.clear();
    tempmap.clear();
    
    if(openfile.is_open())
    {
        //sf::Music music;
        //std::string location;
        //openfile >> location;
        //music.openFromFile(location);

        while(!openfile.eof())
        {
            std::string str, value;
            std::getline(openfile,str);
            std::stringstream stream(str);
            while(std::getline(stream, value, ' '))
            {
                if(value.length() > 0)
                {
                    std::string xx = value.substr(0, value.find(','));
                    std::string yy = value.substr(value.find(',') + 1);
                    int x, y, i, j;
                    for(i = 0; i < xx.length(); i++)
                    {
                        if(!std::isdigit(xx[i]))
                            break;
                    }
                    for(j = 0; j < yy.length(); j++)
                    {
                        if(!std::isdigit(yy[j]))
                            break;
                    }
                    x = (i == xx.length() ? std::atoi(xx.c_str()) : -1);
                    y = (j == yy.length() ? std::atoi(yy.c_str()) : -1);

                    tempmap.push_back(sf::Vector2i(x,y));
                }
            }
            if(tempmap.size() > 0)
            {
            tilemap.push_back(tempmap);
            tempmap.clear();
            }
        }
    }
}

void Map::loadcolmap()
{
    std::ifstream openfile;
    switch(current)
    {
    case 1:
        openfile.open("col1.txt");
        break;
    }

    std::vector<int> tempmap;

    colmap.clear();
    tempmap.clear();
    
    if(openfile.is_open())
    {

        while(!openfile.eof())
        {
            std::string str, value;
            std::getline(openfile,str);
            std::stringstream stream(str);
            while(std::getline(stream, value, ' '))
            {
                if(value.length() > 0)
                {
                    int a = std::atoi(value.c_str());
                    tempmap.push_back(a);
                }
            }
            if(tempmap.size() > 0)
            {
            colmap.push_back(tempmap);
            tempmap.clear();
            }
        }
    }
}

void Map::draw(sf::RenderWindow& window, Player& player)
{
    window.clear();
    for(int i = 0; i < tilemap.size(); i++)
    {
        for(int j = 0; j < tilemap[i].size(); j++)
        {
            if(tilemap[i][j] != sf::Vector2i(-1, -1))
            {
                tiles.setPosition(j * 16 * 2,i * 16 * 2);
                tiles.setTextureRect(sf::IntRect(tilemap[i][j].x * 16, tilemap[i][j].y * 16, 16, 16));
                tiles.setScale(2.0,2.0);
                window.draw(tiles);
            }
        }
    }
    window.draw(player.getSprite());
    window.display();
}


Player.h:

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
#ifndef player_h
#define player_h
#include<SFML/Graphics.hpp>
#include<vector>

class Player
{
public:
    Player();
    void update();
    void move(float X, float Y){sprite.move(X * time.asMilliseconds(), Y * time.asMilliseconds());}
    sf::Sprite getSprite(){return sprite;}
    sf::Vector2f topleft, topright, bottomleft, bottomright;
private:
    float speed;
    sf::Clock clock, animationclock;
    sf::Vector2f direction;
    sf::Texture texture;
    sf::Time time;
    sf::Sprite sprite;
};

#endif


Player.cpp:

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
#include"player.h"
#include<iostream>
#include<algorithm>

Player::Player()
{
    texture.loadFromFile("ash.png");
    direction = sf::Vector2f(0,0);
    animationclock.restart();
    sprite.setTexture(texture);
    sprite.setPosition(300,300);
    speed = 0.1;
}

void Player::update()
{
    topleft = sf::Vector2f(sprite.getPosition().x, sprite.getPosition().y);
    topright = sf::Vector2f(sprite.getPosition().x + 32, sprite.getPosition().y);
    bottomleft = sf::Vector2f(sprite.getPosition().x, sprite.getPosition().y + 32);
    bottomright = sf::Vector2f(sprite.getPosition().x + 32, sprite.getPosition().y + 32);

    //Controls
    time = clock.getElapsedTime();
    if(sf::Keyboard::isKeyPressed)
        clock.restart();

    if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
    {
        sprite.move(0,- speed * time.asMilliseconds());
        direction.y = 0;
    }
    else if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
    {
        sprite.move(0, speed * time.asMilliseconds());
        direction.y = 1;
    }
    else if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
    {
        sprite.move(- speed * time.asMilliseconds(), 0);
        direction.y = 2;
    }
    else if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
    {
        sprite.move(speed * time.asMilliseconds(), 0);
        direction.y = 3;
    }

    //Animation
    else if(sf::Keyboard::isKeyPressed)
        animationclock.restart();
    if(animationclock.getElapsedTime() > sf::seconds(0.25))
    {
        direction.x++;
        animationclock.restart();
        if(direction.x == 3)
            direction.x = 0;
    }
    sprite.setTextureRect(sf::IntRect(direction.x * 32,direction.y * 32, 32, 32));
}


main.cpp:

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
#include<SFML/Graphics.hpp>
#include<iostream>
#include"player.h"
#include"Map.h"

int main()
{
    Map map;
    sf::RenderWindow window(sf::VideoMode(640,480),"Pokémon");
    Player player;

    while(window.isOpen())
    {
        sf::Event gameevent;
        while(window.pollEvent(gameevent))
        {
            switch(gameevent.type)
            {
            case sf::Event::Closed:
                window.close();
                break;
            }
        }
        player.update();
        map.loadmap();
        map.loadcolmap();
        map.draw(window, player);
        if(map.collides((int)player.topleft.y, (int)player.topleft.x) == 1)
        {
            player.move(0.1,0.1);
        }
        if(map.collides((int)player.topright.y, (int)player.topright.x) == 1)
        {
            player.move(-0.1,0.1);
        }
        if(map.collides((int)player.bottomleft.y, (int)player.bottomleft.x) == 1)
        {
            player.move(0.1,-0.1);
        }
        if(map.collides((int)player.bottomright.y, (int)player.bottomright.x) == 1)
        {
            player.move(-0.1,-0.1);
        }
    }
    return EXIT_SUCCESS;
}


Ich hoffe, es ist nicht zu verwirrend, aber ich hab jetzt eine Art geistliche Blockade, ich komm einfach nicht drauf, wie ich das lösen soll.

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

8

11.07.2013, 12:24

Wieso speichert deine colmap ints?
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

9

11.07.2013, 13:25

Weil sie auch andere Sachen abgesehen von Kollision tun soll. Wenn man zB. auf Gras läuft, soll es einen anderen Ton geben, wie auf Sand. Im Wasser soll man langsamer werden und noch solche Sachen. Sonst hätte ich nur einen Bool-Wert für Kollision benutzt. Der Integer-Wert 1 steht bei mir für Kollision.

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

10

11.07.2013, 14:31

(int)player.topleft.y
Ich will ja nicht lästig sein. Aber ein Cast, dazu auch noch ein C-Cast in der Form ist selten eine gute Idee. Hier wird der Float Wert gerundet, und bei c/c++ wird immer abgerundet. So etwas kann zu durchaus sehr schwer zu findenden Laufzeitfehlern führen. Fatal wird dies aber im Zusammenhang der endlichen Genauigkeit von Float Werten. Es kann durchaus passieren, dass durch Operationen wie z.B. 10.0f / 2 zu 4.999…f wird. Bei deinem Cast wird dieser Wert zu einem Integer Wert von 4 und der Compiler meckert nicht mal.

Im zusammenhang mit C++ sollte ist es auch angebrachter zu den C++ Casts zu greifen. Um ein wie gewohntes Runden zu ermöglichen kann man zum umzuwandelnden Wert 0.5f addieren.

Generell kann ich dir nur empfehlen sehr genau auf deine Typen zu achten, C/C++ kann ohne viel Gemecker aus Kraut Rüben machen. Und meist ist dies nicht gewollt.

Wenn dir dieses Verhalten bekannt und dies so gewollt ist habe ich nix gesagt.

C++-Programmierung: Typumwandlung
:love: := Go;

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »H5::« (11.07.2013, 14:38)


Werbeanzeige