Cocos2d-x 3,9 неправильного происхождения и видимого размера, когда в ландшафте?
Я разместил свой профиль в альбомной ориентации:
<activity
android:name="org.cocos2dx.cpp.AppActivity"
android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Затем я запускаю игру и печатаю оригинал и видимый размер.
log("DEBUG: origin = %f, %f", origin.x, origin.y);
log("DEBUG: visibleSize = %f, %f", visibleSize.width, visibleSize.height);
Вывод был: (Кстати, проектное разрешение было 1024 х 768)
D/cocos2d-x debug info: DEBUG: origin = 0.000000, 75.772583
D/cocos2d-x debug info: DEBUG: visibleSize = 1024.000000, 616.454834
Обратите внимание, что системная панель "back-home-apps" находится на правой стороне экрана. Я также попытался поместить изображение в середину экрана, установив его положение (origin.x + visibleSize.width / 2, origin.y + visibleSize.height / 2)
, но, как вы можете видеть, из-за неправильного видимого размера и происхождения, изображение направлено к нижней части экрана.
Я ожидал, что происхождение должно быть (0,0), а видимый размер должен быть (1024 - height-of-system-bar
) х 768. Но, как вы можете видеть, происхождение имеет дельту на Y
ось, и видимый размер принять удар также на Y
ось --- как будто Cocos2d-x подумал, что экран был в портретной ориентации, а системная панель находится внизу экрана.
Как мне сказать cocos2d, что телефон находится в альбомной ориентации?
1 ответ
Решил загадку. Две вещи здесь:
Я неправильно вычислял координаты. Что я на самом деле сделал
((origin.x + visibleSize.width / 2), (origin.y + visibleSize.height / 2))
, Я сделал ошибку, введя этот вопрос, а не скопировав / вставив код, что привело к путанице.После этого исправления исходный и видимый размеры по-прежнему не соответствуют размеру экрана, и это вызвано тем, что я использовал политику NO_BORDER (о которой я не упомянул в вопросе). Cocos2d увеличил содержимое, чтобы заполнить все пространство экрана, в результате чего ось, которая длиннее, чем необходимо, была зажата посередине.