制作对象的多个版本

Posted

技术标签:

【中文标题】制作对象的多个版本【英文标题】: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。 【参考方案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));

【讨论】:

以上是关于制作对象的多个版本的主要内容,如果未能解决你的问题,请参考以下文章

云原生-Dockerdocker镜像制作上传dockerfile命令解析

将多个对象添加到另一个对象

一个 MinGW,多个 GCC 版本——怎么做?

android studio,如何为发布版本制作签名的 apk(使用 KTS 构建文件的 gradle)

在一个 Debian 软件包中支持多个 Boost 版本

mac os安装多个版本的chrome