制作对象的多个版本
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->CreatePanelDoodle(pX, 0, pY);
-> PlatformManager->CreatePanelDoodle(pX, 0, pY);
我希望创建 createpaneldoodle 函数并多次复制它。我希望它本质上是一个我可以实例化的对象,因为当这段代码没有被制作成单独的函数时它可以工作。不过,我不确定如何将其变成我想要做的事情。
createpaneldoodle
是一个函数。 “重复多次” 是什么意思? “我希望它本质上是一个我可以实例化的对象,因为当这段代码没有被制成单独的函数时,它可以工作。” 为什么?当您将PlatformManager Panels = new PlatformManager->CreatePanelDoodle(pX, 0, pY);
更改为PlatformManager->CreatePanelDoodle(pX, 0, pY);
时会发生什么?你想发生什么?
为什么你有未初始化的变量float pX;
和float pY;
和不同的变量float pX = plat[i].x;
resp。 float pY = plat[i].y;
在循环中?您正在使用未初始化的值调用 PlatformManager->CreatePanelDoodle(pX, 0, pY);
。可能你想用for (int i = 0; i < 10; i++) PlatformManager->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命令解析