-6) 速度y=-6; } 无效更新() { 速度y+=重力/400; 位置Y+=速度Y/400; 位置X+=速度X/400; 如果(位置Y>195.0) { 位置y=195.0; 速度y=0.0; onGround=正确; } 如果(位置X>195) { 位置X=195.0; } 如果(位置X,c++,sfml,C++,Sfml" /> -6) 速度y=-6; } 无效更新() { 速度y+=重力/400; 位置Y+=速度Y/400; 位置X+=速度X/400; 如果(位置Y>195.0) { 位置y=195.0; 速度y=0.0; onGround=正确; } 如果(位置X>195) { 位置X=195.0; } 如果(位置X,c++,sfml,C++,Sfml" />

我试图在我的SFML平台中实现一个双跳转,但它并没有按照预期的方式工作 我想在SFML做一个C++的制版机,但是我不能让按钮按下。尝试双跳不起作用,按住跳跃按钮会使我的角色不断跳跃。非常感谢您的帮助 #include <SFML/Graphics.hpp> sf::RenderWindow window(sf::VideoMode(200, 200), "Platformer"); float positionX = 100.0; float positionY = 175.0; float velocityX = 0.0; float velocityY = 0.0; float gravity = 1.3; bool onGround = false; sf::RectangleShape player(sf::Vector2f(5, 5)); sf::RectangleShape block(sf::Vector2f(5, 20)); int jumpCounter = 0; void MoveLeft() { velocityX = -12; } void MoveRight() { velocityX = 12; } void StartJump() { if (!onGround && jumpCounter == 0) { velocityY = -12; jumpCounter = 1; } if(onGround) { velocityY = -12; onGround = false; jumpCounter = 1; } } void EndJump() { if(velocityY > -6) velocityY = -6; } void Update() { velocityY += gravity/400; positionY += velocityY/400; positionX += velocityX/400; if(positionY > 195.0) { positionY = 195.0; velocityY = 0.0; onGround = true; } if(positionX > 195) { positionX = 195.0; } if(positionX < 0) { positionX = 0; } player.setPosition(positionX, positionY); velocityX = 0.0; if (onGround) jumpCounter = 0; } void Render() { window.clear(); window.draw(player); window.display(); } int main() { window.setKeyRepeatEnabled(false); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)); Update(); Render(); if (event.type == sf::Event::Closed) window.close(); if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) StartJump(); if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) MoveLeft(); if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) MoveRight(); } return 0; } #包括 sf::RenderWindow窗口(sf::VideoMode(200200),“Platformer”); 浮动位置X=100.0; 浮动位置Y=175.0; 浮动速度x=0.0; 浮动速度y=0.0; 浮子重力=1.3; bool-onGround=false; 矩形形状播放器(sf::Vector2f(5,5)); 矩形块(sf::Vector2f(5,20)); int跳线计数器=0; void MoveLeft() { 速度x=-12; } void MoveRight() { 速度x=12; } void StartJump() { 如果(!onGround&&jumpCounter==0) { 速度y=-12; 跳线计数器=1; } 如果(每轮) { 速度y=-12; onGround=假; 跳线计数器=1; } } void EndJump() { 如果(速度Y>-6) 速度y=-6; } 无效更新() { 速度y+=重力/400; 位置Y+=速度Y/400; 位置X+=速度X/400; 如果(位置Y>195.0) { 位置y=195.0; 速度y=0.0; onGround=正确; } 如果(位置X>195) { 位置X=195.0; } 如果(位置X

我试图在我的SFML平台中实现一个双跳转,但它并没有按照预期的方式工作 我想在SFML做一个C++的制版机,但是我不能让按钮按下。尝试双跳不起作用,按住跳跃按钮会使我的角色不断跳跃。非常感谢您的帮助 #include <SFML/Graphics.hpp> sf::RenderWindow window(sf::VideoMode(200, 200), "Platformer"); float positionX = 100.0; float positionY = 175.0; float velocityX = 0.0; float velocityY = 0.0; float gravity = 1.3; bool onGround = false; sf::RectangleShape player(sf::Vector2f(5, 5)); sf::RectangleShape block(sf::Vector2f(5, 20)); int jumpCounter = 0; void MoveLeft() { velocityX = -12; } void MoveRight() { velocityX = 12; } void StartJump() { if (!onGround && jumpCounter == 0) { velocityY = -12; jumpCounter = 1; } if(onGround) { velocityY = -12; onGround = false; jumpCounter = 1; } } void EndJump() { if(velocityY > -6) velocityY = -6; } void Update() { velocityY += gravity/400; positionY += velocityY/400; positionX += velocityX/400; if(positionY > 195.0) { positionY = 195.0; velocityY = 0.0; onGround = true; } if(positionX > 195) { positionX = 195.0; } if(positionX < 0) { positionX = 0; } player.setPosition(positionX, positionY); velocityX = 0.0; if (onGround) jumpCounter = 0; } void Render() { window.clear(); window.draw(player); window.display(); } int main() { window.setKeyRepeatEnabled(false); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)); Update(); Render(); if (event.type == sf::Event::Closed) window.close(); if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) StartJump(); if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) MoveLeft(); if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) MoveRight(); } return 0; } #包括 sf::RenderWindow窗口(sf::VideoMode(200200),“Platformer”); 浮动位置X=100.0; 浮动位置Y=175.0; 浮动速度x=0.0; 浮动速度y=0.0; 浮子重力=1.3; bool-onGround=false; 矩形形状播放器(sf::Vector2f(5,5)); 矩形块(sf::Vector2f(5,20)); int跳线计数器=0; void MoveLeft() { 速度x=-12; } void MoveRight() { 速度x=12; } void StartJump() { 如果(!onGround&&jumpCounter==0) { 速度y=-12; 跳线计数器=1; } 如果(每轮) { 速度y=-12; onGround=假; 跳线计数器=1; } } void EndJump() { 如果(速度Y>-6) 速度y=-6; } 无效更新() { 速度y+=重力/400; 位置Y+=速度Y/400; 位置X+=速度X/400; 如果(位置Y>195.0) { 位置y=195.0; 速度y=0.0; onGround=正确; } 如果(位置X>195) { 位置X=195.0; } 如果(位置X,c++,sfml,C++,Sfml,sf::Keyboard::isKeyPressed()返回所提供键的当前状态。如果当前按下按键,则为true;如果未按下按键,则为false 当用户点击向上键时,它通常会被按下若干帧。在这些帧中的每一帧上,测试是否按了up键,并调用StartJump()。因此,按一次向上键将调用多次StartJump()。这会立即耗尽两次跳跃的能量,所以你实际上无法进行第二次跳跃 您可能更幸运地听到与按下的向上键对应的sf::Event。每个完整的按键只会有一个这样的事件。想解释一下“双跳”应该是什么吗?

sf::Keyboard::isKeyPressed()
返回所提供键的当前状态。如果当前按下按键,则为
true
;如果未按下按键,则为
false

当用户点击向上键时,它通常会被按下若干帧。在这些帧中的每一帧上,测试是否按了up键,并调用
StartJump()
。因此,按一次向上键将调用多次
StartJump()。这会立即耗尽两次跳跃的能量,所以你实际上无法进行第二次跳跃

您可能更幸运地听到与按下的向上键对应的
sf::Event
。每个完整的按键只会有一个这样的事件。

想解释一下“双跳”应该是什么吗?