2015-01-08 1 views
0

SFML C++에 대한 첫 프로젝트 중 하나를 수행 중이며 지금 작업을 결합하려고합니다.키로 이동하는 내 원을 얻는 방법

sf::CircleShape shape(50); 
shape.setPosition(800, 450); 

shape.setFillColor(sf::Color(100, 250, 50)); 

지금은 W, A, S, D 또는 화살표 키를 사용하여 이동하는 것을 시도하고있다 : 일을하려고 어떤 메신저는 내가 만들어 내 서클을 가지고있다.

하지만이에, 내가 좋아하는 몇 가지를 시도하는 방법이 확실하지 않다 :

 if (sf::Keyboard::IsKeyPressed(sf::Keyboard::Up)) 
      Sprite.Move(spriteSpeed * App.GetFrameTime(), 0); 

하지만 난 잘못하고 무엇 메신저 확실하지 않다, 누군가가 나를 도울 수 있습니까? 미리 감사드립니다.

이것은 내가 가지고있는 코드입니다.

#include "stdafx.h" 
#include<SFML/Graphics.hpp> 
#include<string> 
#include<iostream> 

int main() 
{ 
    //Here we declare the render window so we can talk to it. 
    sf::RenderWindow window; 

    //sf::VideoMode is to set the size of the window 
    //The seconds parameter (the string) is for setting the title 
    //The style is to show/hide the close button and the title bar, or to set full screen 
    window.create(sf::VideoMode(1600, 900), " My First SFML Game", sf::Style::Titlebar | sf::Style::Close | sf::Style::Resize); 

    //----------------------------------wait for a key to be pressed------------------------------------- 
    //This shows a message that you should press a key 
    /*std::cout << "Press a key to continue." << std::endl;*/ 
    //--------------------------------------------------------------------------------------------------- 

    //----------------------------------Showing a message------------------------------------------------ 
    //Define the messages that will be showed, and the display text 
    std::string message = "Hello my name is Jean-Paul van Houten"; 
    std::string display = ""; 

    int index = 0; 

    window.setKeyRepeatEnabled(false); 
    //---------------------------------------------------------------------------------------------------- 

    sf::CircleShape shape(50); 
    shape.setPosition(800, 450); 

    //this while loop will only be called if the window is open. 
    while(window.isOpen()) 
    { 
     //Define the event variable 
     sf::Event eventSF; 

     //Check if there is an event 
     while(window.pollEvent(eventSF)) 
     { 


      shape.setFillColor(sf::Color(100, 250, 50)); 
      //shape.setPosition(eventSF.mouseMove.x 0 sha,eventSF.mouseMove.y); 
      window.clear(); 
      switch(eventSF.type) 
      { 
      case sf::Event::Closed: 
       window.close(); 
       break; 
      case sf::Event::MouseEntered: 
       std::cout << "Mouse within screen bounds" << std::endl; 
       break; 
      case sf::Event::MouseLeft: 
       std::cout << "Mouse outisde the screen bounds" << std::endl; 
       break; 
      case sf::Event::MouseMoved: 
       std::cout << "X: " << eventSF.mouseMove.y << " Y: " << eventSF.mouseMove.y << std::endl; 

       break; 
      case sf::Event::MouseButtonPressed: 
       if(eventSF.mouseButton.button == sf::Mouse::Left) 
        std::cout << "Left Button Pressed At: X: " << eventSF.mouseButton.x << " Y: " << eventSF.mouseButton.y << std::endl; 
       break; 
      case sf::Event::MouseWheelMoved: 
       std::cout << "Scrolled: " << eventSF.mouseWheel.delta << std::endl; 
       break; 

      case sf::Event::GainedFocus: 
       std::cout << "Window Active" << std::endl; 
       break; 
      case sf::Event::LostFocus: 
       std::cout << "Window Not Active" << std::endl; 
       break; 
      case sf::Event::Resized: 
       std::cout << "Width: " << eventSF.size.width << " Height: " << eventSF.size.height << std::endl; 
       break; 

      case sf::Event::TextEntered: 
       if(eventSF.text.unicode != 8)//(eventSF.text.unicode >= 33 && eventSF.text.unicode <= 126) //This is to only include the characters between the number, now we use punctuation and letters. 
        std::cout << (char)eventSF.text.unicode; 
       else if(eventSF.text.unicode == 8) 
        display = display.substr(0, display.length() - 1); 

       system("cls"); 
       std::cout << display; 
       break; 
      } 



      window.draw(shape); 

      //If you release a key 
      if(eventSF.type == sf::Event::KeyReleased) 
      { 
       //and this key is the enter key 
       if(eventSF.key.code == sf::Keyboard::Return) 
       { 
        display += message[index]; 
        index ++; 
        system("cls"); //CLS on windows, clear on mac/linux 
        std::cout << display; 
       } 
      } 
     } 

     window.display(); 

    } 
} 

답변

1

먼저, 내부의 이벤트 설문 조사 스위치 내부 처리 및 KeyPressed 이벤트를 추가 할 코드는 '스프라이트 또한

switch(eventSF.type) 
{ 
    [...] 
    case sf::Event::KeyPressed: 
     if(eventSF.key.code == sf::Keyboard::Up) 
     { 
      shape.move(0, 1) 
     } 
     break; 

} 

,

shape.setFillColor(sf::Color(100, 250, 50)); 

shouldn 이동 게임 루프 내부에 있어야합니다.

그리고이

window.clear(); 
window.draw(shape); 
window.display(); 

이벤트 설문 조사 루프 밖에서해야한다 : 당신의 도움에 대한

while(window.isOpen()) 
{ 
    //Define the event variable 
    sf::Event eventSF; 

    //Check if there is an event 
    while(window.pollEvent(eventSF)) 
    { 
     [...] 
    } 


    window.clear(); 
    window.draw(shape); 
    window.display(); 
} 
+0

안녕하세요, 감사합니다! 난 단지 하나의 문제가있어 기존의 함수를 이동 –

+0

나는 (소문자 'm'과 함께) 이동, 소문자 '내 대답을 편집 – JML

+0

당신은 멋진 젠장 :) –

관련 문제