- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 C++ SFML,我一直在加载 tilemaps 和 colision maps但它们总是侧向加载,所以我必须反转 x,y 以正确放置它们这意味着在计算运动和碰撞时它变得相当令人困惑,我是不是做错了什么。
然后我知道我正在加载线路,但是有没有办法加载我的地图而不用横着走。
void LoadColMap(const char*filename)
{
std::ifstream openfile(filename);
std::vector<int> tempMap;
colMap.clear();
if(openfile.is_open())
{
while(!openfile.eof())
{
std::string str, value;
std::getline(openfile,str);
std::stringstream stream(str);
while(std::getline(openfile,str))
{
for(int i =0; i < str.length(); i++)
{
if(str[i] != ' ') // if the value is not a space
{
char value = str[i];
tempMap.push_back(value - '0');
}
}
colMap.push_back(tempMap); // push back the value of temp vector into the map vector
tempMap.clear(); // clear the temp vector readt for the next value
}
}
}
}
最佳答案
我制作了一个用作 C++ 二维数组的模板类,但它只是维度 columns * rows
的普通 C++ 数组。它比嵌套 vector 或手动嵌套数组更容易、更直观地使用。我知道它不能直接解决你的问题,但它在过去的项目中对我有很大帮助,所以我觉得有必要分享它。
// some map data
int mapData = 123;
// somewhere you initialize the map (start of program)
Util::TMatrix<int> test(40, 40);
test.fill(0); // fill with default value
// then when loading data, just set directly, without temp vector or array
test.set(12, 32, mapData);
// you can use the total size to loop through all the data without nested for loops.
cout << "The array (40 x 40) is of total size: " << test.size() << endl;
cout << "Testing array bounds: " << test.isInsideBounds(12, 32) << endl;
cout << "Retrieve map data: " << test.at(12, 32) << endl;
int key = test.getKey(12, 32);
cout << "Our map data is really just at key: " << key << endl;
The array (40 x 40) is of total size: 1600
Testing array bounds: 1
Retrieve map data: 123
Our map data is really just at key: 512
#ifndef TMatrix_H_
#define TMatrix_H_
#include <algorithm>
namespace Util {
/*
*
*/
template<typename T>
class TMatrix {
public:
/**
* Must call Fill(T value) to use the TMatrix
* it will fill it by default with "value"
* and init it.
*/
TMatrix(unsigned int rows, unsigned int cols);
virtual ~TMatrix();
// Dimensions retrieval
unsigned int rows() const;
unsigned int cols() const;
unsigned int size() const;
unsigned int bytes() const;
/**
* Fill "mArray" with "val"
*
*/
void fill(T val);
/**
* get value AT (x, y)
*/
T at(unsigned int x, unsigned int y) const;
/**
* Get value AT "key", if you know the key
*/
T at(unsigned int key) const;
/**
* set value "element" AT (x, y)
*/
void set(unsigned int x, unsigned int y, T element);
/**
* set value "element" AT (key)
*/
void set(unsigned int key, T element);
/**
* @return the key of the 1 dimensionnal array mArray
*/
unsigned int getKey(unsigned int x, unsigned int y) const;
bool isInsideBounds(unsigned int key) const;
bool isInsideBounds(unsigned int x, unsigned int y) const;
private:
unsigned int mRows;
unsigned int mCols;
T * mArray;
};
/**
* Must call Fill(T value) to use the TMatrix
* it will fill it by default with "value"
* and init it.
*/
template<typename T>
inline TMatrix<T>::TMatrix(unsigned int rows, unsigned int cols) :
mRows(rows),
mCols(cols) {
mArray = new T[mRows * mCols];
}
template<typename T>
inline TMatrix<T>::~TMatrix() {
delete[] mArray;
}
// Dimensions retrieval
template<typename T>
inline unsigned int TMatrix<T>::rows() const {
return mRows;
}
template<typename T>
inline unsigned int TMatrix<T>::cols() const {
return mCols;
}
template<typename T>
inline unsigned int TMatrix<T>::size() const {
return rows() * cols();
}
template<typename T>
inline unsigned int TMatrix<T>::bytes() const {
return size() * sizeof(T);
}
/**
* Fill "mArray" with "val"
*
*/
template<typename T>
inline void TMatrix<T>::fill(T val) {
//std::uninitialized_fill_n(mArray, Size(), val);
std::fill_n(mArray, size(), val);
}
/**
* get value AT (x, y)
*/
template<typename T>
inline T TMatrix<T>::at(unsigned int x, unsigned int y) const {
return mArray[getKey(x, y)];
}
/**
* Get value AT "key", if you know the key
*/
template<typename T>
inline T TMatrix<T>::at(unsigned int key) const {
return mArray[key];
}
/**
* set value "element" AT (x, y)
*/
template<typename T>
inline void TMatrix<T>::set(unsigned int x, unsigned int y, T element) {
if (isInsideBounds(x, y)) {
mArray[getKey(x, y)] = element;
}
}
/**
* set value "element" AT (key)
*/
template<typename T>
inline void TMatrix<T>::set(unsigned int key, T element) {
if (isInsideBounds(key)) {
mArray[key] = element;
}
}
/**
* Returns the key of the 1 dimensionnal array mArray
* returns -1 on OOB.
*/
template<typename T>
inline unsigned int TMatrix<T>::getKey(unsigned int x, unsigned int y) const {
return x * cols() + y;
}
template<typename T>
inline bool TMatrix<T>::isInsideBounds(unsigned int key) const {
return key < size();
}
template<typename T>
inline bool TMatrix<T>::isInsideBounds(unsigned int x, unsigned int y) const {
return isInsideBounds(getKey(x, y));
}
} // namespace Util
#endif /* TMatrix_H_ */
关于c++ sfml横向加载 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29532207/
即使我的设备旋转(纵向->横向->纵向),我也需要始终以横向模式录制视频。 取角度很简单,我用的是hyroscope。我的问题是总是横向录制视频。需要任何建议。 我正在使用 AVCaptureSess
我正在 iPad(1,2) 以及 Samsung Tab 2 上测试我的网络应用程序。我有不同的 CSS(外部)集可应用于 iPad 上的横向/纵向模式和选项卡 2 上的横向/纵向模式。 但我无法为
我正在将Snappy Bundle和Symfony 2.1一起使用。 我有一些问题未在此捆绑包的文档中找到: 如何设置方向? 有没有显示页码的方法? 这是我的捆绑包的config.yml: knp_s
我一直在寻找这个问题的答案,但找不到任何答案。显然,iPhone SDK 3.0 使得 UIImagePickerController 可以以横向模式显示成为可能 - 但我没有找到任何允许这样做的方法
我有 1 个 Storyboard,我在 Swift 3 中的 Xcode 8 上使用带有大小类的自动布局。 我有这个当前的肖像 View : 目前,这是 1 个带有标签的垂直堆栈 View 。 在横
我正为这个而焦头烂额。基本上,我需要我的菜单根据菜单的内容水平放置一个容器。所以,我知道 table 和 table-cell 属性可以做到这一点。但是,当我将其与 Superfish Menu 结合
我努力做到这一点: 但我无法正确获取第三列和翻转的标题。 我现在是这样的: 最佳答案 该解决方案适用于 IE9、Chrome、Firefox、Safari 和 Opera,不需要 JavaScrip
我想要一个水平方向的 WPF DataGrid,有人知道解决方案吗? 最佳答案 我之前已经这样做了,因为我们希望能够对 DataGrid 和 PropertyGrid 使用相同的控件。很多事情都必须改
我正在开发一个适用于智能手机的网站版本,在处理智能手机横向方向的媒体查询时遇到了一个小问题。对于纵向,我正在使用以下媒体查询并且它工作得很好: @media only screen and (max-
如何让“AVCaptureVideoPreviewLayer”在横向方向上正确显示?它在纵向模式下工作正常但不旋转,并且当父 View Controller 处于横向模式时显示旋转的相机捕获。 最佳答
这个问题在这里已经有了答案: Force "portrait" orientation mode (12 个回答) 关闭2年前。 我的第一款 Android 游戏即将完成,但我遇到了一个非常简单的问题
我的数据在其中一个字段中具有嵌套映射。例如,数据位于名为“customers”的表中,如下所示: 姓名:比尔·琼斯 地址:{"billing":{"street":"123 Main", "city"
我正在横向模式下运行应用程序。我需要注意什么才能使拍摄的屏幕截图也处于横向模式。 我在 iPhone 应用程序中使用以下代码,底部有标签栏并拍摄屏幕截图,但它始终仅处于纵向模式。为什么? UIWind
谁能举例说明如何将单点触控应用程序的 View 从纵向旋转为横向,反之亦然? 最佳答案 如果您在 Interface Builder 中设置 ui 元素的几何形状,请确保在 Size Inspecto
我正在使用简单的 MPMoviePlayerController。在纵向模式下,它嵌入到我的布局中。当我旋转我的设备时,我希望它全屏显示。在全屏模式下,有一个完成按钮,但它唯一的作用就是暂停视频。当点
我正在尝试读取 JSON 模式,但似乎无法弄清楚如何将所有先前对象等输出到层次结构中。 这是JSON响应方案 { "Shopping": { "Orders": { "OrderInfo": {
我想在我的布局中包含一个 SlidingDrawer,但我会将它放在布局的侧面。所以开口是从左到右,而不是从下往上。这怎么办? 最佳答案 this link可能会帮助您创建水平滑动抽屉。如果您正在使用
就在我以为我已经解决了所有问题时..我遇到了这个问题。 场景。 我有一个简单的 tableView。并在导航项的 titleView 中带有搜索栏。 SearchBar 通过 View Control
我有一个带有 MGSplitView 的应用程序,其中包含表格 View 和 UIWebView,该应用程序固定为横向。 Web View 有一个附加到 Web View 的 UITapGesture
我有一部 iPhone,我正在添加横向支持。之前只是肖像。 当键盘显示时,我无法将文本字段移开。 我使用的解决方案与记录在案的 Apple 解决方案非常相似 here . 该解决方案在纵向模式下工作正
我是一名优秀的程序员,十分优秀!