【发布时间】: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。
标签: c++ class object new-operator ogre