第 4 次射击声明在 SFML 游戏中不起作用
4th Shooting statement not working in SFML game
我目前正在使用 SFML 2.0 创建游戏。基本上它是一个自上而下的射手,我对下面的陈述有困难。按下 space 栏时会射出一支箭。有四个语句取决于玩家精灵 (archSprite) 面对的方式。这是由这个函数
计算出来的source.y决定的
enum DirectionKeys { Up, Left, Down, Right};
sf::Vector2i source(0, 0);
int getCellY(DirectionKeys direction)
{
return (direction*64);
}
我遵循声明
的逻辑
int dir = source.y/64;
将找出精灵面对我使用的精灵表的方向 0 = 向上 1 = 向左 2 = 向下 3 = 向右 这句话除了向右射击之外的所有内容都正确射击 谁能弄清楚为什么我的方向箭头右边是向下射击而箭头没有旋转?就好像射门权的声明一起被忽略了。任何人都可以请教吗?
#include "Game.h"
#include "Tilemap.h"
#include <SFML\Graphics.hpp>
#include <iostream>
if(keypress == sf::Keyboard::Space && keyPressed)
{
int tblt = this->_game_data.curr_bullet;
this->_arr_bullet_data[tblt].active = true;
//every 100th bullet it is set to the up rotation
int dir = source.y/64;
if (dir == 0)
{
_arr_bullet_spr[tblt].rotate(90);
this->_arr_bullet_data[tblt].startpos = this->archSprite.getPosition() + sf::Vector2f(64,-42);
this->_arr_bullet_data[tblt].direction = sf::Vector2f(0,-1);
}
else if (dir == 1)
{
_arr_bullet_spr[tblt].rotate(360);
this->_arr_bullet_data[tblt].startpos = this->archSprite.getPosition() + sf::Vector2f(-22,0);
this->_arr_bullet_data[tblt].direction = sf::Vector2f(-1,0);
}
else if (dir = 2)
{
_arr_bullet_spr[tblt].rotate(270);
this->_arr_bullet_data[tblt].startpos = this->archSprite.getPosition() + sf::Vector2f(0,96);
this->_arr_bullet_data[tblt].direction = sf::Vector2f(0,1);
}
else if (dir = 3)
{
_arr_bullet_spr[tblt].setRotation(180);
this->_arr_bullet_data[tblt].startpos = this->archSprite.getPosition() + sf::Vector2f(0,0);
this->_arr_bullet_data[tblt].direction = sf::Vector2f(1,0);
}
this->_arr_bullet_spr[tblt].setPosition(this>_arr_bullet_data[tblt].startpos);
this->_game_data.curr_bullet++;
}
非常感谢
if(dir = 2)
和if(dir = 3)
必须分别是if(dir == 2)
和if(dir == 3)
。
我目前正在使用 SFML 2.0 创建游戏。基本上它是一个自上而下的射手,我对下面的陈述有困难。按下 space 栏时会射出一支箭。有四个语句取决于玩家精灵 (archSprite) 面对的方式。这是由这个函数
计算出来的source.y决定的enum DirectionKeys { Up, Left, Down, Right};
sf::Vector2i source(0, 0);
int getCellY(DirectionKeys direction)
{
return (direction*64);
}
我遵循声明
的逻辑int dir = source.y/64;
将找出精灵面对我使用的精灵表的方向 0 = 向上 1 = 向左 2 = 向下 3 = 向右 这句话除了向右射击之外的所有内容都正确射击 谁能弄清楚为什么我的方向箭头右边是向下射击而箭头没有旋转?就好像射门权的声明一起被忽略了。任何人都可以请教吗?
#include "Game.h"
#include "Tilemap.h"
#include <SFML\Graphics.hpp>
#include <iostream>
if(keypress == sf::Keyboard::Space && keyPressed)
{
int tblt = this->_game_data.curr_bullet;
this->_arr_bullet_data[tblt].active = true;
//every 100th bullet it is set to the up rotation
int dir = source.y/64;
if (dir == 0)
{
_arr_bullet_spr[tblt].rotate(90);
this->_arr_bullet_data[tblt].startpos = this->archSprite.getPosition() + sf::Vector2f(64,-42);
this->_arr_bullet_data[tblt].direction = sf::Vector2f(0,-1);
}
else if (dir == 1)
{
_arr_bullet_spr[tblt].rotate(360);
this->_arr_bullet_data[tblt].startpos = this->archSprite.getPosition() + sf::Vector2f(-22,0);
this->_arr_bullet_data[tblt].direction = sf::Vector2f(-1,0);
}
else if (dir = 2)
{
_arr_bullet_spr[tblt].rotate(270);
this->_arr_bullet_data[tblt].startpos = this->archSprite.getPosition() + sf::Vector2f(0,96);
this->_arr_bullet_data[tblt].direction = sf::Vector2f(0,1);
}
else if (dir = 3)
{
_arr_bullet_spr[tblt].setRotation(180);
this->_arr_bullet_data[tblt].startpos = this->archSprite.getPosition() + sf::Vector2f(0,0);
this->_arr_bullet_data[tblt].direction = sf::Vector2f(1,0);
}
this->_arr_bullet_spr[tblt].setPosition(this>_arr_bullet_data[tblt].startpos);
this->_game_data.curr_bullet++;
}
非常感谢
if(dir = 2)
和if(dir = 3)
必须分别是if(dir == 2)
和if(dir == 3)
。