我发布的原始代码已被编辑,因为它似乎引起了混乱。我知道这是错的,但我只想用它作为一个例子。我想要使用的代码就是这个:
https://github.com/SFML/SFML/wiki/Source:-AnimatedSprite
你可以专注于这一部分:
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
window.close();
}
sf::Time frameTime = frameClock.restart();
// if a key was pressed set the correct animation and move correctly
sf::Vector2f movement(0.f, 0.f);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
currentAnimation = &walkingAnimationUp;
movement.y -= speed;
noKeyWasPressed = false;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
currentAnimation = &walkingAnimationDown;
movement.y += speed;
noKeyWasPressed = false;
}
让我们假设而不是
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
我希望这个程序能够根据从此代码外部收到的参数进行操作。
这将是我想要遵循的计划:
从我的C ++代码(让我们称之为Origin)我用这个命令调用这个程序(让我们称之为AnimatedSprite.exe):
ShellExecute(NULL,NULL,"C:\\AnimatedSprite.exe",NULL ,NULL,SW_SHOWDEFAULT);
这将打开AnimatedSprite.exe而不发送任何命令。
现在我想保持开放并向他发送命令,例如
ShellExecute(NULL,NULL,"C:\\Try.exe",MyCommandLetter.c_str() ,NULL,SW_SHOWDEFAULT);
这样当我已经打开的AnimatedSprite.exe收到“MyCommandLetter”作为argv时(是的,我知道我必须在main中声明argc和argv,我必须修改原始代码)
它的确如下:
if (argv[1]=='a')
{
currentAnimation = &walkingAnimationUp;
movement.y -= speed;
noKeyWasPressed = false;
}
希望它更清楚。
如果我必须使用不是ShellExecute的其他功能并不重要,只要我能理解它是如何工作的(用这个例子就可以了)。
提前致谢。
答案 0 :(得分:0)
好的,正如我理解这个问题,你希望被调用程序对多个参数做出反应。在这种情况下,你应该建立你的主要不是单一的" if else"声明,而是一个循环的参数与"切换案例"声明,处理所有给定的参数。查看示例here