Irrlicht引擎中如何设置GUI按钮的位置?
解决Irrlicht中GUI按钮位置调整的问题
嘿,我来帮你搞定这个按钮位置的问题!其实你已经在创建按钮的时候用到了位置设置的核心逻辑,只是可能没完全意识到,另外还有创建后动态调整的方法,我给你详细拆解:
一、创建按钮时直接设置位置
你创建按钮的代码里,那个irr::core::rect<irr::s32>(200, 110, 600, 200)就是按钮的位置+尺寸定义:
- 前两个参数
(200, 110)是按钮左上角的绝对坐标(和你用draw2DImage时的坐标系完全一致) - 后两个参数
(600, 200)是按钮右下角的绝对坐标
如果要在创建时调整位置,直接修改这四个数值就行。比如想把按钮移到窗口左上角区域,就改成:
irr::gui::IGUIButton *newGameButton = gui->addButton(irr::core::rect<irr::s32>(50, 50, 250, 120), 0, -1, L"NEW GAME");
这样按钮左上角就在(50,50),右下角在(250,120),位置和大小就一起搞定了。
二、创建后动态调整按钮位置
如果按钮已经创建完成,想要后续修改位置,有两种简单的方法:
方法1:用setPosition+setSize分别调整
IGUIButton继承自IGUIElement,可以直接用这两个方法分别设置位置和尺寸:
// 设置按钮左上角的新位置(比如移到(300,150)) newGameButton->setPosition(irr::core::position2d<irr::s32>(300, 150)); // 设置按钮的尺寸(宽度400,高度90,保持原有大小的话可以跳过这个步骤) newGameButton->setSize(irr::core::dimension2d<irr::s32>(400, 90));
方法2:直接修改按钮的矩形区域
如果你想一次性调整位置和尺寸,可以直接获取并修改按钮的rect:
// 获取当前按钮的绝对矩形 irr::core::rect<irr::s32> btnRect = newGameButton->getAbsoluteRect(); // 修改左上角坐标,同时保持原有尺寸 btnRect.UpperLeftCorner = irr::core::position2d<irr::s32>(300, 150); btnRect.LowerRightCorner = btnRect.UpperLeftCorner + btnRect.getSize(); // 应用新的矩形设置 newGameButton->setAbsoluteRect(btnRect);
注意:如果你的按钮有父GUI元素(addButton的第二个参数不是0),那坐标会是相对父元素的,这时候可以用setRelativeRect来设置相对位置,逻辑和上面一致。
试试上面的方法,应该就能轻松调整按钮位置啦!
内容的提问来源于stack exchange,提问作者YPR
相关产品推荐
相关产品推荐

