嘿大家,谢谢你的阅读,
我正在努力创造一个无尽的亚军,并创造了一个
vector<TILE*>* tiles = new vector<TILE*>[LANE_HEIGHT] //LANE_HEIGHT is the number of vertical TILEs
TILE基本上是sf :: VertexArray的保姆类,它填充它,应用纹理,绘制对象并移动sf :: Vertex点(移动是问题)
我用
遍历所有数组for (int i = 0; i < LANE_HEIGHT;i++) {
for (int j = 0; j < tiles.size(); j++) {
if(tiles[j] != nullptr)
tiles[j]->move(sf::Vector2f(0.2f,0)); //Framerate is set to 30 to make this clearer
}
}
我的问题是大多数花车适用于
tiles[j]->move()
使物体“摆动”,使其看起来像是在浅水中。
我首先想到这是一个舍入错误,所以我经历了整个课程并将所有内容包裹在float(x)
中,没有成功
我在数字中得到了正确的结果但是将应用的浮点数设置为float(0.05f)
很明显顶点的余像(也是对角线或反面)被其余部分拖动,经过几帧后它跳到了想要的位置,然后重复
由于数组中的每个对象都是这样做并且重叠到前一个对象上,因此摆动效应就会产生
我正在失去理智。 如何停止拖动并将其捕捉到它在控制台中显示的实际位置?
P.S。我省略了浮动包装器,因为它没有帮助并使其可读性降低(也忽略了一些当前未使用的功能):)
提前谢谢!
#pragma once
#include <iostream>
#include <vector>
#include "SFML/Graphics.hpp"
class TILE{
private:
const float WIDTH; //Width of the object
const float HEIGHT; //Height of the object
sf::VertexArray body; //Body for drawing purposes (holds all Vertex points)
sf::Vector2f globalPos; //Global position in the game window
sf::Texture* texture; //Stores applied texture
public:
TILE::TILE(sf::Vector2f dim) : WIDTH(dim.x), HEIGHT(dim.y) { }
TILE::TILE(sf::Vector2f position, sf::Texture* tex, sf::Vector2f dim) : WIDTH(dim.x), HEIGHT(dim.y){
globalPos = position;
texture = tex;
body = sf::VertexArray(sf::TriangleFan, 4);
//Maps the coordinates to the vectors, top-left = [0] then clockwise
body[0].position = sf::Vector2f(globalPos.x + (-(WIDTH / 2.f)), globalPos.y + (-(HEIGHT / 2.f)));
body[1].position = sf::Vector2f(globalPos.x + (WIDTH / 2.f), globalPos.y + (-(HEIGHT / 2.f)));
body[2].position = sf::Vector2f(globalPos.x + (WIDTH / 2.f), globalPos.y + (HEIGHT / 2.f));
body[3].position = sf::Vector2f(globalPos.x + (-(WIDTH / 2.f)), globalPos.y + (HEIGHT / 2.f));
body[0].texCoords = sf::Vector2f(0.f, 0.f);
body[1].texCoords = sf::Vector2f(float(texture->getSize().x), 0.f);
body[2].texCoords = sf::Vector2f(float(texture->getSize().x), float(texture->getSize().y));
body[3].texCoords = sf::Vector2f(0.f, float(texture->getSize().y));
}
TILE::~TILE() {
texture = nullptr;
}
void draw(sf::RenderWindow &window) { window.draw(body, texture); }
sf::Vector2f getBB_TopLeft() { return body[0].position; }
sf::Vector2f getBB_BotRight() { return body[2].position; }
void move(sf::Vector2f dir) {
globalPos += dir;
body[0].position += dir;
body[1].position += dir;
body[2].position += dir;
body[3].position += dir;
}
sf::Vector2f getGlobalPos() { return globalPos; }
};
答案 0 :(得分:0)
我一直试图删除那些没有结果的摆动。
我试图在每个坐标上圆(或在地板上)。 不能工作
我试图将每个坐标乘以100(存储为int
)然后除以(再次为100),希望只留下2个小数位。 不能工作
我试图乘以除以最大(和最小)int
值。 不能工作
在某些情况下,乘以并除以不那么大 int
(如10000)似乎有效
我的结论是问题与浮点小数有关,在某些情况下,这些小数是四舍五入的,会产生奇怪的效果。
对不起这个糟糕的帮助