我不使用tile,而是使用sf :: Vertex绘制的多维数据集.每个立方体有6个边,每个边有4个点.

所以我只需要cubes[numCube].sides()[numSide]....选择一个方面.
我创建了立方体layer.cpp:
for(int J = 0; J < mapSize; J++)
{
for(int I = 0; I < mapSize; I++)
{
x = (J - I) * (cubeSize/2);
y = (J + I) * (cubeSize/4);
c = new cube(cubeSize, x, y, z, I, J);
cs.push_back(*c);
}
}
Run Code Online (Sandbox Code Playgroud)
在cube.cpp中我创建了侧面,然后,在sides.cpp中,我像这样计算每个点的坐标:
switch(typeSide)
{
case 0://DOWN_SIDE
light = 1;
tmp_x = x + (size/2);
tmp_y = y + (size/2);
p0 = new point(tmp_x, tmp_y, tmp_z);
tmp_x = x + size; …Run Code Online (Sandbox Code Playgroud) 在我的2D等距引擎中,我有以下类:
`maps(variable)/layers(variable)/cubes(variable)/sides(6)/points(4)/coordinates(3)`
Run Code Online (Sandbox Code Playgroud)
sides包含4 points(1 point= 1 coordinate(x,y,z)).Folers:
assets/numTexture/numLight.png
Run Code Online (Sandbox Code Playgroud)
我用numTexture和numLight计算一个数字,它是textureNumberEntry(我在数组中加载了所有numLight.png(纹理)).
但纹理化的错误是错误的:
我在图层类中定义了立方体坐标:
for(int J = 0; J < mapSize; J++)
{
for(int I = 0; I < mapSize; I++)
{
x = (J - I) * (cubeSize/2);
y = (J + I) * (cubeSize/4);
c = new cube(cubeSize, x, y, z, I, J);
cs.push_back(*c);
}
}
Run Code Online (Sandbox Code Playgroud)
在side.cpp中,我在sideType上有一个开关(如果它是顶部,左边等等......我用不同的方式定义我的点'坐标).每个立方体我有6个(这里只有数据)像这样:
switch(typeSide)
{
case 0://DOWN_SIDE
light = 0;
tmp_x = x + (size/2);
tmp_y = y + …Run Code Online (Sandbox Code Playgroud) 我目前正在开发2D等距地图编辑器.我显示包含点和纹理的实体(立方体,玩家).每个立方体由12个点组成(12个点,但由sfml(sf :: VertexArray)显示时处理为4个点的3个边).
(我知道我包含了一些'.cpp'时间,我的IDE(视觉工作室)有问题,我正试图解决它,请不要关心它.)
main.cpp中
#pragma once
#include "globalfunctions.h" //global functions + main headers + class headers
int main() {
int mapSize = 0;
int cubeSize = 0;
cout << "Map size: "; cin >> mapSize; cout << endl;
cout << "Cube size: "; cin >> cubeSize; cout << endl;
int windowWidth = (mapSize * cubeSize) - (cubeSize * 2);
int windowHeight = ((mapSize * cubeSize) - (cubeSize * 2)) / 2;
renderWindow window(windowWidth, windowHeight, mapSize, cubeSize);
int nbMaxTextures = …Run Code Online (Sandbox Code Playgroud) 我正在编写一个2D引擎,这是我的问题:每个瓷砖都有一个'纹理'数字(0:网格,1:草等......)当我尝试改变这样的数字时:
maps[currentMapID].getLayerArray()[l].getTileArray()[t].setTexture(currentSelectedTexture);
Run Code Online (Sandbox Code Playgroud)
(l,t等......来自'for'循环.)
什么都没有改变,数字仍然是0.
这是代码.setTexture(..):
void tile::setTexture(int t)
{
numTexture = t;
}
Run Code Online (Sandbox Code Playgroud)
创建测试图块时,此代码完全正常工作.
我的代码(类)的结构是:
Map > layer > tile. => all of them in a class wich handle graphics.
Run Code Online (Sandbox Code Playgroud)
我怀疑问题来自于此(同样map class,每个人都有一个std::vector<layer>类似的功能 - >):
std::vector<tile> layer::getTileArray()
{
return tiles;
}
Run Code Online (Sandbox Code Playgroud)
它会std::vector<layer>从我的班级或副本中归还给我吗?如果它是副本,它可以解释图块的纹理编号保持不变.
如果它是副本,我怎么能改变tile.numTexture另一个类?指针?参考文献?(我真的不明白这个)
我也检查了currentSelectedTexture,那里没有问题.