小编Mad*_*adz的帖子

2D等距 - SFML - 正确的公式,错误的坐标范围

我不使用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)

c++ linear-equation isometric sfml

18
推荐指数
1
解决办法
632
查看次数

sf ::以错误的方式应用的纹理

在我的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)).
  • 每个立方体包含6个边.
  • 我可以用立方体创建一个我想要的尺寸的地图(相同,我想要的尺寸).

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)

c++ textures isometric sfml

14
推荐指数
1
解决办法
512
查看次数

2D钻石(等距)地图编辑器 - 纹理无限扩展?

我目前正在开发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)

c++ textures 2d isometric sfml

5
推荐指数
1
解决办法
2403
查看次数

不改变值的功能

我正在编写一个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,那里没有问题.

c++ sfml

1
推荐指数
1
解决办法
60
查看次数

标签 统计

c++ ×4

sfml ×4

isometric ×3

textures ×2

2d ×1

linear-equation ×1