스프라이트의 이동을위한 클래스를 애니메이션, 아주 기본적인 것들과 함께 만들었습니다.SFML 스프라이트 이동
마침내 모든 오류를 제거한 후 기본 논리를 모두 확인한 결과 운동 벡터는 내가 원한 것이고 모든 것이 괜찮아 보였다는 것을 알았습니다. 문제는 일단 스프라이트 이동을위한 버튼을 누르는 것입니다. 잠시 동안 움직 인 다음 원래 위치로 돌아갑니다.
내 클래스 이동 (스프라이트의 이동 및 애니메이션을 담당)은 이동 중에 설정된 변수에 따라 이동하는 주 소스 코드에서 사용되는 스프라이트를 반환합니다.
변수를 충분히 높은 값으로 설정하면 스프라이트가 원래 위치를 즉시 이동 한 다음 돌아와서 다시 이동하고 return.I 코드를 검사 한 것을 볼 수 있습니다. 스프라이트를 재설정하지 않았습니다. 위치 또는 그런 것. 다음은 코드입니다 : -
소스 코드 -
여기#include"SFML\Graphics.hpp"
#include"check.h"
#include"display.h"
int main()
{
sf::Sprite plop;
sf::RenderWindow window(sf::VideoMode(1360, 720), "Larger SFML", sf::Style::Default);
sf::Texture texture;
texture.loadFromFile("bahamut.png");
texture.setRepeated(false);
float fraps = 0.0;
check playa;
sf::Clock fps;
while (window.isOpen())
{
fraps = fps.restart().asSeconds();
plop = playa.movereturn(100000.,fraps,&texture);
window.clear();
window.draw(plop);
display dis(window);
}
return 0;
}
체크의 헤더입니다 : -
여기#pragma once
#include"SFML\Graphics.hpp"
class check
{
public:
check();
sf::Sprite movereturn(float speed,float fps,sf::Texture* texture);
~check();
};
체크의 정의입니다 : -
#include "check.h"
check::check()
{
}
sf::Sprite check::movereturn(float speed,float fps,sf::Texture* texture)
{
sf::Sprite playas;
playas.setTexture(*texture);
sf::Vector2f movements = { 0.,0. };
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A))
{
movements = { -speed*fps,0. };
playas.move(movements);
}
else
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::D))
{
movements = { speed*fps, 0. };
playas.move(movements);
}
else
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::S))
{
movements = { 0.,speed*fps };
playas.move(movements);
}
else
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::W))
{
movements = { 0.,-speed*fps };
playas.move(movements);
}
else
movements = { 0., 0. };
}
}
}
return playas;
}
check::~check()
{
}
Display는 윈도우를 가져 와서 윈도우에 window.display() 함수를 가지고 있습니다.이 클래스가 없으면 핸들러가 있습니다. 예외 그래서 나는 이것을 사용하도록 강요 당한다.
당신은 단지 필요없이() window.display를 호출 할 수 있어야합니다 당신의 디스플레이 클래스를 사용하는 경우 기본적으로 동일한 코드이므로 다른 질문도 함께 업데이트해야합니다. – Eddge