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

xxendlessxx

Treue Seele

  • »xxendlessxx« ist der Autor dieses Themas

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

1

01.09.2009, 20:50

[SFML] Ich kann Objekte nicht über die Pfeiltasten steuern.

Ich hab mit SFML angefangen und hab versucht ein einfaches Viereck zu zeichnen und dieses dann zu steuern. Nur irgendwie mag das Ding sich einfach nicht bewegen :-)
Hoffe ihr könnt mir helfen.

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
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
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>
#include <string>
#include <sstream>

#include "cPlayer.hpp"

int main()
{
    bool Running = true;
    sf::RenderWindow App(sf::VideoMode(800,600,32),"Hello World");
    sf::Event ev;

    cPlayer Player;
    App.SetFramerateLimit(60);

    while(Running)
    {
        while(App.GetEvent(ev))
        {
            switch(ev.Type)
            {
                case sf::Event::Closed:
                    Running = false;
                    break;
                case sf::Event::KeyPressed:
                {
                    switch(ev.Key.Code)
                    {
                        case sf::Key::Escape:
                            Running = false;
                        break;
                        
                        case sf::Key::Up:
                            Player.mDUP = true;
                        break;
                        
                        case sf::Key::Down:
                            Player.mDUP = true;
                        break;

                        case sf::Key::Left:
                            Player.mDUP = true;
                        break;
                        
                        case sf::Key::Right:
                            Player.mDUP = true;
                        break;
                    }
                }
                case sf::Event::KeyReleased:
                {
                    switch(ev.Key.Code)
                    {
                        case sf::Key::Up:
                            Player.mDUP = false;
                        break;
                        
                        case sf::Key::Down:
                            Player.mDUP = false;
                        break;

                        case sf::Key::Left:
                            Player.mDUP = false;
                        break;
                        
                        case sf::Key::Right:
                            Player.mDUP = false;
                        break;
                    }
                }
            }
        }
        //Logik

        Player.Move();

        //Render

        App.Clear();
        App.Draw(Player.mRect);
        App.Display();
    }
    App.Close();
    return EXIT_SUCCESS;
}





cPlayer.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <SFML/Graphics.hpp>

#ifndef _CPLAYER_HPP_
#define _CPLAYER_HPP_

class cPlayer
{
public:
    float mXPos,mYPos;
    float mW,mH;
    float mVelocity;

    bool mDUP,mDDOWN,mDLEFT,mDRIGHT;
    sf::Shape mRect;
    cPlayer();
    void Move();
};

#endif




cPlayer.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
#include "cPlayer.hpp"
#include <SFML/Graphics.hpp>

cPlayer::cPlayer()
{
    this->mXPos = 10;
    this->mYPos = 10;
    this->mW    = 10;
    this->mH    = 10;
    this->mVelocity = 2;
    mRect = sf::Shape::Rectangle(   
                                    this->mXPos, 
                                    this->mYPos, 
                                    this->mXPos+this->mW, 
                                    this->mYPos+this->mH,
                                    sf::Color(255,255,255)
                                );
    
    mDUP = false;
    mDDOWN = false;
    mDLEFT = false;
    mDRIGHT = false;
}

void cPlayer::Move()
{
    if(this->mDUP)
    {
        this->mYPos+=this->mVelocity;
        this->mRect.SetY(this->mYPos);
    }
    else if(this->mDDOWN)
    {
        this->mYPos-=this->mVelocity;
        this->mRect.SetY(this->mYPos);
    }
    if(this->mDLEFT)
    {
        this->mXPos+=this->mVelocity;
        this->mRect.SetX(this->mXPos);
    }
    else if(this->mDRIGHT)
    {
        this->mXPos-=this->mVelocity;
        this->mRect.SetX(this->mXPos);
    }

    printf("X: %f - Y: %f\n",this->mXPos,this->mYPos);
}



gruß michi

Nexxtron

Alter Hase

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

2

01.09.2009, 21:12

also erstmal vorweg : die ganzen this kannst dir sparen...die brauchste nich...



C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
while(App.GetEvent(ev)) 
        { 
            switch(ev.Type) 
            { 
                case sf::Event::Closed: 
                    Running = false; 
                    break; 
             }
        }

if(App.GetInput().IsKeyDown(sf::Key::Up)) // Diese Abfrage is besser als Events

{
     Player.mYPos += mVelocity;
}

// und so weiter....also des machste dann mit sf::Key::Down und Right und Left

C-/C++-Quelltext

1
2
3
4
5
CPlayer::Move()
{
     mRect.SetX(mXPos);
     mRect.SetY(mYPos);
}




und dann kannste dir die if abfragen in der Move Methode au sparen...
New Project: Operation CityRacer