Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

SFML problem ze sterowaniem

Ostatnio zmodyfikowano 2012-01-27 20:46
Autor Wiadomość
arek194
Temat założony przez niniejszego użytkownika
SFML problem ze sterowaniem
» 2012-01-27 18:40:57
Witam,
Mam problem ze sterowaniem w moim prototypie gry, gdy naciskam spacje to pocisk leci tylko wtedy kiedy jest wciśnięta spacja lub klawisz strzałki. Pod spodem zamieszczam kod źródłowy.

C/C++
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp> 
#include <iostream>
#include "obiekty.h"


#define WIDTH 800
#define HEIGHT 400


bool wyjscie = false;

const int ILE_KUL = 5;
//ludek
void init_ludek( GRACZ & ludek );
void draw_ludek( GRACZ & ludek, sf::RenderWindow & oknoAplikacji );
//void init_sciana(MUR &sciana, sf::Image image);
//pocisk
void init_pocisk( POCISK pocisk[], int size );
void draw_pocisk( POCISK pocisk[], int size, sf::RenderWindow & oknoAplikacji );
void fire_pocisk( POCISK pocisk[], int size, GRACZ & ludek );
void update_pocisk( POCISK pocisk[], int size );

int main()
{
   
   
    //deklaracje obiektów
    GRACZ ludek;
    POCISK pocisk[ ILE_KUL ];
   
   
    //MUR sciana;
   
   
   
   
    sf::RenderWindow oknoAplikacji( sf::VideoMode( WIDTH, HEIGHT, 32 ), "Kurs SFML - http://cpp0x.pl" );
    //////////////////////////////////////////////////////////////// 
    //Init
    init_ludek( ludek );
    init_pocisk( pocisk, ILE_KUL );
   
   
   
   
   
    while( oknoAplikacji.IsOpened() )
    {
       
        oknoAplikacji.Clear( sf::Color( 0, 0, 255 ) );
        /////////////////////////////////////////////////////
        //draw
        draw_ludek( ludek, oknoAplikacji );
        draw_pocisk( pocisk, ILE_KUL, oknoAplikacji );
       
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) )
        {
            if( zdarzenie.Type == sf::Event::Closed )
                 oknoAplikacji.Close();
           
            if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape )
                 oknoAplikacji.Close();
           
            if( zdarzenie.Type == sf::Event::MouseButtonPressed && zdarzenie.MouseButton.Button == sf::Mouse::Middle )
                 oknoAplikacji.Close();
           
           
            const sf::Input & sterowanie = oknoAplikacji.GetInput();
            if( sterowanie.IsKeyDown( sf::Key::Left ) )
            {
                //obraz.Move(-ludek.predkosc, 0);
                ludek.x -= ludek.predkosc;
            }
           
            else if( zdarzenie.Type == sf::Event::KeyPressed && sterowanie.IsKeyDown( sf::Key::Right ) )
            {
                // obraz.Move(ludek.predkosc, 0);
                ludek.x += ludek.predkosc;
            }
           
            else if( zdarzenie.Type == sf::Event::KeyPressed && sterowanie.IsKeyDown( sf::Key::Up ) )
            {
                //obraz.Move(0, -ludek.predkosc);
                ludek.y -= ludek.predkosc;
               
            }
           
            else if( zdarzenie.Type == sf::Event::KeyPressed && sterowanie.IsKeyDown( sf::Key::Down ) )
            {
                //obraz.Move(0, ludek.predkosc);
                ludek.y += ludek.predkosc;
            }
           
            else if( zdarzenie.Type == sf::Event::KeyPressed && sterowanie.IsKeyDown( sf::Key::Space ) )
            {
                fire_pocisk( pocisk, ILE_KUL, ludek );
               
            }
           
            else if( zdarzenie.Type == sf::Event::KeyPressed && sterowanie.IsKeyDown( sf::Key::Escape ) )
            {
                wyjscie = false;
            }
           
            if( ludek.x < 0 )
                 ludek.x = 0;
            else if( ludek.x > 300 )
                 ludek.x = 300;
            else if( ludek.y < 0 )
                 ludek.y = 0;
            else if( ludek.y > 400 )
                 ludek.y = 400;
            //update_pocisk
            update_pocisk( pocisk, ILE_KUL );
        }
       
       
       
       
        oknoAplikacji.Display();
       
    }
    return 0;
}



void init_ludek( GRACZ & ludek )


void draw_ludek( GRACZ & ludek, sf::RenderWindow & oknoAplikacji )


//pocisk
void init_pocisk( POCISK pocisk[], int size )


void draw_pocisk( POCISK pocisk[], int size, sf::RenderWindow & oknoAplikacji )


void fire_pocisk( POCISK pocisk[], int size, GRACZ & ludek )


void update_pocisk( POCISK pocisk[], int size )
P-49602
pekfos
» 2012-01-27 19:14:44
aktualizuj pociski poza pętlą komunikatów.
P-49613
arek194
Temat założony przez niniejszego użytkownika
» 2012-01-27 20:46:27
dziękuje za pomoc temat do zamknięcia
P-49619
« 1 »
  Strona 1 z 1