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

11

29.01.2016, 11:32

Soll ich das move definieren Beispiel:

C-/C++-Quelltext

1
ptr1 = std::move(bullet);


So sieht meine Player Klasse aus.

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
#pragma once

#include <SFML\Graphics.hpp>

class Player {

    friend class ShotManager;

public:
    Player              (std::string Path);
    void Update         (float ElapsedTime);
    void Render         (sf::RenderWindow &Window);

private:
    sf::Texture         Texture;
    sf::Sprite          Sprite;

    sf::Vector2f        Position;

    float               MoveSpeed;

};


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
#include "Player.hpp"

Player::Player(std::string Path) : Position(400, 550), MoveSpeed(250.0f) {

    Texture.loadFromFile(Path.c_str());
    Sprite.setTexture(Texture);
    Sprite.setPosition(Position);

}

void Player::Update(float ElapsedTime) {

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) && Sprite.getPosition().x > 0) {

        Sprite.move(-MoveSpeed * ElapsedTime, 0);

    }
    else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D) && Sprite.getPosition().x + Texture.getSize().x < 800) {

        Sprite.move(MoveSpeed * ElapsedTime, 0);

    }

}

void Player::Render(sf::RenderWindow &Window) {

    Window.draw(Sprite);

}

Nimelrian

Alter Hase

Beiträge: 1 216

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

  • Private Nachricht senden

12

29.01.2016, 11:58

Kleine Frage: Wieso gibt es überhaupt einen ShotManager?
Und dot bezieht sich darauf, dass du nicht RAII betreibst.
Generell gibt es keinen Grund, eine Init()-Funktion zu benutzen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Nimelrian« (29.01.2016, 12:53)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

29.01.2016, 12:08

Und wieso ist er ein Friend von Player? Die haben doch nichts miteinander zu tun und sollten unabhängig sein.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

29.01.2016, 12:40

So sieht meine Player Klasse aus.

Dacht ich mir... Player hat keinen Defaultkonstruktor; wo wird dem Player Objekt in deinem ShotManager sein Path übergeben?

Nachdem du für ShotManager keinen Konstruktor deklariert hast, gibt es einen impliziten Defaultkonstruktor; der Compiler kann den aber nicht implementieren, weil es für einen Member der Klasse (dein Player) keinen Defaultkonstruktor gibt, weshalb der implizite Defaultkonstruktor dann als deleted definiert ist und dann fliegt dir das Teil um die Ohren sobald du einen ShotManager erzeugen willst, weil es für ShotManager keinen Konstruktor gibt...

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dot« (29.01.2016, 12:48)


15

29.01.2016, 12:59

Ich habe die ShotManager klasse jetzt gelöscht und es Läuft jetzt alles auf der Bullet Klasse. Und mein Error habe ich jetzt gelöst :)

Aber ich habe immer noch Probleme mit dem std::unique_ptr

Nimelrian

Alter Hase

Beiträge: 1 216

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

  • Private Nachricht senden

16

29.01.2016, 13:03

es Läuft jetzt alles auf der Bullet Klasse

Ich ahne übles... Wie sieht die jetzt aus?
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

17

29.01.2016, 13:22

Die sieht jetzt so aus.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once

#include <SFML\Graphics.hpp>
#include <list>

class Bullet {

public:
    Bullet              ();
    void Init           (float PosX, float PosY);
    void Update         (float ElapsedTime);
    void Render         (sf::RenderWindow &Window);

private:
    sf::Texture         Texture;
    sf::Sprite          Sprite;

    float               MoveSpeed;

};


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
#include "Bullet.hpp"

Bullet::Bullet() : MoveSpeed(150.0f) {

    Texture.loadFromFile("Assets/Bullet.png");
    Sprite.setTexture(Texture);
    Sprite.setOrigin(static_cast<float>(Texture.getSize().x / 2), static_cast<float>(Texture.getSize().y / 2));
    Sprite.setPosition(400, 500);

}

void Bullet::Init(float PosX, float PosY) {

    Sprite.setPosition(PosX, PosY);

}

void Bullet::Update(float ElapsedTime) {

    Sprite.move(0, -MoveSpeed * ElapsedTime);

}

void Bullet::Render(sf::RenderWindow &Window) {

    Window.draw(Sprite);

}

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

18

29.01.2016, 13:26

sf::Texture als Value-Member einer Klasse ist eine ganz schlechte Idee!
https://www.spieleprogrammierer.de/wiki/…insteiger-Tipps
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

19

29.01.2016, 14:36

Ich habe mir eine NCTexture klasse erstellt. Ist das so richtig ?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#pragma once

#include <SFML\Graphics.hpp>

class NCTexture : public sf::Texture, private sf::NonCopyable {

    

};


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
#pragma once

#include <SFML\Graphics.hpp>
#include <list>

#include "NCTexture.hpp"

class Bullet {

public:
    Bullet              ();
    void Init           (float PosX, float PosY);
    void Update         (float ElapsedTime);
    void Render         (sf::RenderWindow &Window);

private:
    NCTexture           NCTexture;
    sf::Sprite          Sprite;

    float               MoveSpeed;

};


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
#include "Bullet.hpp"

Bullet::Bullet() : MoveSpeed(300.0f) {

    NCTexture.loadFromFile("Assets/Bullet.png");
    Sprite.setTexture(NCTexture);
    Sprite.setOrigin(static_cast<float>(NCTexture.getSize().x / 2), static_cast<float>(NCTexture.getSize().y / 2));
    Sprite.setPosition(400, 500);

}

void Bullet::Init(float PosX, float PosY) {

    Sprite.setPosition(PosX, PosY);

}

void Bullet::Update(float ElapsedTime) {

    Sprite.move(0, -MoveSpeed * ElapsedTime);

}

void Bullet::Render(sf::RenderWindow &Window) {

    Window.draw(Sprite);

}

Nimelrian

Alter Hase

Beiträge: 1 216

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

  • Private Nachricht senden

20

29.01.2016, 14:43

Das geht schon in die richtige Richtung. Dennoch speicherst du bei jedem Bullet-Objekt die volle Textur als Member und müllst damit eventuell den Speicher voll und verursachst jede Menge Last zwischen CPU und GPU.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Werbeanzeige