私はスプライトを動かすためのクラスをアニメーション、かなり基本的なものとともに作成しました。SFMLスプライトの動き
最終的にすべてのエラーを取り除いた後、基礎ロジックとすべてをチェックして、動きベクトルがほんとうに私が望んでいたものを見ました。問題は一度、スプライトちょっと動いてから元の位置に戻ります。
My class move(スプライトの移動とアニメーションを担当)は、moveで設定された変数に従って移動するメインソースコード内で使用されるスプライトを返します。
変数を十分高い値に設定すると、スプライトが元の位置を瞬時に移動してから戻ってきて再び移動して戻ります。コードをチェックしました。スプライトをリセットしていませんポジションかそのようなもの。 は、ここでは、コードです: -
ソースコード: -
#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