Ja das ist nicht sonderlich verwunderlich. Du hast eine Klasse »schießen«, welche einen Sprite hat, der aber weder initialisiert, noch gezeichnet wird. Bei dem Befehl »abschuss« wird einfach nur die Position geändert. Hier im Übrigen noch ein Fehler, auf den du aufpassen musst. Selbst, wenn es mal funktionieren sollte, dann wird sich der Schuss noch nicht bewegen. Bzw. nur, wenn »Q« gedrückt gehalten wird. Das ist denke ich nicht das, was du willst.
Zum anderen hast du einen Sprite Schuss, welcher zwar ein Bild hat und vmtl. an der Position (0,0) gezeichnet werden dürfte. Dieser Sprite hat aber gar nichts mit dem Sprite aus »schiessen« zu tun, sondern ist ein eigenes Objekt.
Ein »App.Clear()« solltest du in jedem Frame übrigens auch noch aufrufen.
EDIT:
So könnte in etwa eine Klasse aussehen(ganz ganz grober Code)
|
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
|
class projectile
{
public:
projectile( const sf::Image& image, sf::Vector2f position ) : projectile_sprite()
{
projectile_sprite = new sf::Sprite( image, position );
}
~projectile()
{
delete projectile_sprite;
}
void update()
{
projectile_sprite->Move( 10, 0 );
}
void draw( const sf::RenderWindow& App )
{
App.Draw( *projectile_sprite );
}
private:
sf::Sprite* projectile_sprite;
}
|
Und dann erstellst du einfach immer, wenn Q gedrückt wird ein solches Objekt. Speichers alle in einem std::vector<projectile*> und aktualisierst und zeichnest sie dann alle. Der Update-Funktion könnte man natürlich noch eine Richtung mitgeben, in die sich der Schuss bewegen soll, aber das ist jetzt erst mal nebensächlich.