1
int main() {
sf::RenderWindow window;
sf::Vector2i centerWindow((sf::VideoMode::getDesktopMode().width/2) - 445, (sf::VideoMode::getDesktopMode().height/2) - 480);
window.create(sf::VideoMode(900, 900), "SFML Game", sf::Style::Titlebar | sf::Style::Close);
window.setPosition(centerWindow);
window.setKeyRepeatEnabled(true);
sf::Texture wallTxture;
sf::Sprite wall;
if (!wallTxture.loadFromFile("wall.png")) {
std::cerr << "Error\n";
}
wall.setTexture(wallTxture);
//Gravity Vars:
int groundHeight = 750;
bool isJumping = false;
//Movement Vars:
bool goingRight = false;
bool goingLeft = false;
//Set View Mode:
sf::View followPlayer;
followPlayer.reset(sf::FloatRect(0, 0, window.getSize().x, window.getSize().y));
Player player("newPlayer.png");
player.setPos({ 800, 800 });
sf::Vector2f position(window.getSize().x/2, window.getSize().y/2);
//Main Loop:
while (window.isOpen()) {
const float moveSpeed = 0.1;
sf::Event Event;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) {
isJumping = true;
//Handle Movement While Jumping:
if (goingLeft == true) {
player.move({ -moveSpeed, -moveSpeed });
}
else if (goingRight == true) {
player.move({ moveSpeed, -moveSpeed });
}
else {
player.move({ 0, -moveSpeed });
}
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) {
player.move({ 0, moveSpeed });
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
player.move({ -moveSpeed, 0 });
goingLeft = true;
player.flipX('l');
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
player.move({ moveSpeed, 0 });
goingRight = true;
player.flipX('r');
}
//Event Loop:
while (window.pollEvent(Event)) {
switch (Event.type) {
case sf::Event::Closed:
window.close();
case sf::Event::KeyReleased:
if (Event.key.code == sf::Keyboard::Up) {
isJumping = false;
}
else if (Event.key.code == sf::Keyboard::Left) {
goingLeft = false;
}
else if (Event.key.code == sf::Keyboard::Right) {
goingRight = false;
}
}
}
if (player.getX() > window.getSize().x) {
position.x = player.getX();
}
else {
position.x = window.getSize().x;
}
//If player is in air and not jumping:
if (player.getY() < groundHeight && isJumping == false) {
player.move({ 0, moveSpeed });
}
followPlayer.setCenter(position);
window.clear();
window.setView(followPlayer);
window.draw(wall);
player.drawTo(window);
window.display();
}
}
これは私のコードです。私がしようとしているのは、2Dプラットフォームのサイドチェッカーを作成することです。スプライトがある時点を過ぎると消えるだけで、すべてが機能します。これは私がジャンプして同時に空気中を移動するときにも起こります。私はなぜこれが起こっているのか理解できません。どんな助けも大いに評価されます:)SFML/C++スプライトが特定のポイントの後で消える
いつも便利です:1. SOのコードを正しくフォーマットします(コードボタンを使ってすべてのコードを4つ右に移動できます)。 2.コードが何をしているのかを説明する。 3.あなたの問題がスプライトであるので、スクリーンショットは非常に便利です。 – grochmal
私のコードはプレイヤーを作成しています。そして、カメラが移動中にプレイヤーに追従していて、何らかの理由でプレイヤーが消えてしまっています。私はここで短いビデオを取った:https://www.youtube.com/watch?v=YrDB7uwItIY&feature=youtu.be –
私は問題が見つかりました。何らかの理由で、プレーヤークラス用に作成したflipX関数をインクルードしたときに、このエラーが発生します。だから今私には新しい問題があります。なぜこの関数がこの問題を引き起こしたのですか? –