0

我有一个函数,在其中我用两个指针填充一个指针数组:

Vertex* MacePiece::getPositionOffset(int aDirection){
// returns Plate at Position aParent.myPlates[0]
BasePlate** theGroundPlate = this->getPlates();

Vertex* theOffset[] = {0,0};
switch(aDirection){

        theOffset[0] = theGroundPlate[0]->getVertexAt(0); //A
        theOffset[1] = theGroundPlate[0]->getVertexAt(1); //B
        break;

}

return theOffset[0];

}

接下来,我将该指针与第一个元素的地址一起传递给另一个函数:

Vertex* theParentOffset = aParentPiece->getPositionOffset(aDirection);
theConnectingPiece->setPositionInMace(theParentOffset, aDirection); 

在这里,我使用指向如下的元素:

void MacePiece::setPositionInMace(Vertex* aOffset, int aDirection){
        // set groundplate position
    updateGroundPlatePositionByOffsetVertex(aOffset, aDirection);

}

void MacePiece::updateGroundPlatePositionByOffsetVertex(Vertex* aOffset, int aDirection) {
    BasePlate** thePlates = this->getPlates();

    // first update GroundPlate's Position

    Vertex* A = thePlates[0]->getVertexAt(0);
    Vertex* B = thePlates[0]->getVertexAt(1);
    Vertex* C = thePlates[0]->getVertexAt(2);
    Vertex* D = thePlates[0]->getVertexAt(3);

    switch(aDirection){

        case MOVE_NORTH:

            // still 3D thus 2D's y is 3D'z if camera is looking down Y

            // Two Sides are connecting thus Some Plate locations are identical

            // A.x defined by parent D.x
            A->position[0] = aOffset[1].position[0];
            // A.z defined by parent D.z
            A->position[2] = aOffset[1].position[2];

            //B.x defined by parent C.x
            B->position[0] = aOffset[0].position[0];
            //B.z defined by parent C.z
            B->position[2] = aOffset[0].position[2];

            // now set Opposit side (A->D, B->C), since moving north: 
            // x is the same
            // z is reduced by -1 because OpenGL's Z is reducing to far-pane
            D->position[0] = A->position[0];
            D->position[2] = A->position[2] - 1.0f;

            C->position[0] = B->position[0];
            C->position[2] = B->position[2] - 1.0f;

            break; 

特别是这部分:

// A.x defined by parent D.x
                A->position[0] = aOffset[1].position[0];
                // A.z defined by parent D.z
                A->position[2] = aOffset[1].position[2];

                //B.x defined by parent C.x
                B->position[0] = aOffset[0].position[0];
                //B.z defined by parent C.z
                B->position[2] = aOffset[0].position[2];

aOffset[1] 返回与 aOffset[0] 相同的结果

当我传递一个指向数组的**指针时,每个信息都会丢失。

我正在创造一种迷宫,但它只是在一个方向上失败了。传递该指针有什么问题?如何获得在 Offset[1] 中指向的 Right 元素?

它太讨厌了。

干杯克努特

4

1 回答 1

0

问题出在第一个函数中。您正在返回一个数组的第一个元素,它是一个指针。我认为您的意图是返回两个元素的数组,以便索引 0 和 1 访问您在第一个函数中分配的指针。使用现有数据结构没有简单的解决方法。一种解决方案是让第一个函数返回一个 std::pair。将您的两个指针分配给 pair.first 和 pair .second,这样以后访问这些值就很容易了。

于 2012-09-30T00:39:28.483 回答