核心 API
auto visibleSize = Director::getInstance()->getVisibleSize();
auto origin = Director::getInstance()->getVisibleOrigin();
visibleSize:OpenGL 視圖實際像素寬高 (扣除狀態欄/導航欄)。
origin:視圖左下角在設計分辨率座標系中的偏移量。
座標計算最佳實踐
1. 相對定位 (推薦)
// 螢幕置中
sprite->setPosition(Vec2(origin.x + visibleSize.width/2,
origin.y + visibleSize.height/2));
// 右上角對齊
label->setPosition(Vec2(origin.x + visibleSize.width - label->getContentSize().width/2,
origin.y + visibleSize.height - label->getContentSize().height/2));
2. 錨點配合
// 左下角錨點 (0,0) → setPosition 即為左下角座標
node->setAnchorPoint(Vec2(0, 0));
node->setPosition(origin); // 貼齊左下角
// 中心錨點 (0.5,0.5) → 預設,setPosition 為中心點
3. 設計分辨率政策
// AppDelegate.cpp
glview->setDesignResolutionSize(960, 640, ResolutionPolicy::SHOW_ALL);
// SHOW_ALL:保持比例縮放,可能出現黑邊
// NO_BORDER:填滿螢幕,可能裁切
// EXACT_FIT:拉伸填滿,變形
跨平台注意事項
| 平台 | 注意點 |
| iOS | 刘海屏/安全區需用 getSafeAreaRect() (v3.17+) |
| Android | 沉浸模式下 origin.y 可能非 0,導航欄隱藏會改變 visibleSize |
| Windows/Mac | 窗口可調整大小,監聽 GLViewImpl::onWindowResized 重新佈局 |
UI 適配建議
- 使用
ui::Widget 百分比佈局 (setPositionPercent)。
- 圖集資源提供 1x/2x/3x (或 sd/hd/uhd) 多套,
SpriteFrameCache 自動選擇。
- 文字用
Label TTF/BMFont,避免位圖字體縮放模糊。
- 上一篇文章: C 語言三維字元陣列動態配置與 strcpy 段錯誤解析
- 下一篇文章: C++ 靜態成員變數與靜態成員函數完整實作範例
Copyright ©
程式碼之家 All Rights Reserved