【问题标题】:Making a multiple versions of a Object制作对象的多个版本
【发布时间】:2020-11-10 08:03:43
【问题描述】:

我是一名学生,被指示使用 ogre3d 制作一个涂鸦跳跃复制品。 我有一个函数应该在屏幕上创建一个具有指定形状和位置的面板,所以现在我希望创建一个 for 循环,该循环将生成多个(最多 10 个)和一个随机值,将它们中的每一个设置在 x 上不同的位置,y,z。

void PlatformManager::CreatePanelDoodle( float x, float y, float z){

    
    Plane plane3(Vector3::UNIT_Y, 0);
    MeshManager::getSingleton().createPlane(
        "Paddle2", RGN_DEFAULT,
        plane3,
        20, 5, 20, 20,
        true,
        1, 5, 5,
        Vector3::UNIT_Z);
    Entity* groundEntity3 = scnMgr->createEntity("Paddle2");
    SceneNode* Paddlenode2 = scnMgr->getRootSceneNode()->createChildSceneNode();
    Paddlenode2->setPosition(Ogre::Vector3( x, y, z));
    Paddlenode2->attachObject(groundEntity3);
    groundEntity3->setCastShadows(false);
    
}

这是为了尝试在随机空间中制作多个对象

point plat[20];
    float pX;
    float pY;
    for (int i = 0; i < 10; i++)
    {
        plat[i].x = rand() % 50;
        plat[i].y = rand() % 30;
        float pX = plat[i].x;
        float pY = plat[i].y;
    }
    

    for (int i = 0; i < 10; i++)
    {
        PlatformManager Panels = new PlatformManager->CreatePanelDoodle(pX, 0, pY);
    }
    

问题在于 for 循环创建中的错误“没有合适的构造函数将 void 转换为“平台管理器”

我尝试简单地将构造函数添加到 for 循环中,而根本不使用循环。怎么了?

【问题讨论】:

  • "PlatformManager Panels = new PlatformManager->CreatePanelDoodle(pX, 0, pY);" 这毫无意义。 CreatePanelDoodle 是一个成员函数。你不能用new 调用它。它的返回类型是void。你期望在这里发生什么?这行应该如何创建一个新对象?
  • 可能你只想调用成员函数:PlatformManager Panels = new PlatformManager-&gt;CreatePanelDoodle(pX, 0, pY); -> PlatformManager-&gt;CreatePanelDoodle(pX, 0, pY);
  • 我希望创建 createpaneldoodle 函数并多次复制它。我希望它本质上是一个我可以实例化的对象,因为当这段代码没有被制作成单独的函数时它可以工作。不过,我不确定如何将其变成我想要做的事情。
  • createpaneldoodle 是一个函数。 “重复多次” 是什么意思? “我希望它本质上是一个我可以实例化的对象,因为当这段代码没有被制成单独的函数时,它可以工作。” 为什么?当您将PlatformManager Panels = new PlatformManager-&gt;CreatePanelDoodle(pX, 0, pY); 更改为PlatformManager-&gt;CreatePanelDoodle(pX, 0, pY); 时会发生什么?你想发生什么?
  • 为什么你有未初始化的变量float pX;float pY;和不同的变量float pX = plat[i].x;resp。 float pY = plat[i].y; 在循环中?您正在使用未初始化的值调用 PlatformManager-&gt;CreatePanelDoodle(pX, 0, pY);。可能你想用for (int i = 0; i &lt; 10; i++) { PlatformManager-&gt;CreatePanelDoodle(rand() % 50, 0, rand() % 30); } 替换你的第二个代码sn-p。

标签: c++ class object new-operator ogre


【解决方案1】:

你的第二个代码sn-p有一些问题:

  • 您正在使用未初始化的变量float pX;float pY;
  • 您正在使用 float pX = plat[i].x;float pY = plat[i].y; 隐藏变量
  • 您正在创建多个随机值,但您没有使用它们
  • 您正在尝试将 new 运算符应用于 void 函数
  • 您正在尝试将该结果存储在变量中

你可以解决问题

// Remove this block, you don't use the variables
/*
point plat[20]; // You don't use this array
float pX; // You use it uninitialized
float pY; // You use it uninitialized
for (int i = 0; i < 10; i++) {
    plat[i].x = rand() % 50;
    plat[i].y = rand() % 30;
    float pX = plat[i].x; // You don't use this variable
    float pY = plat[i].y; // You don't use this variable
}
*/

for (int i = 0; i < 10; ++i) {
    PlatformManager->CreatePanelDoodle(static_cast<float>(rand() % 50), 0, static_cast<float>(rand() % 30));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 2018-02-17
    • 2013-06-24
    • 2015-11-24
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2011-04-10
    相关资源
    最近更新 更多