2013-04-13 3 views
0

Я пытаюсь центрировать объект точно в центре экрана. Экран 320X480 иЦентр объекта точно в центре экрана

объект 25X25. Алгоритм я уже пытался построить этот псевдо-код функции:

void (int x, int y, int object){ 

int position = (x-y)/2; 

Update_X(object , position); 

} 

но только центр будет его в X-оси, я хочу также иметь Y-ось по центру. Как сделать i

сделайте это ?? есть ли какой-либо алгоритм, который можно использовать в C или C++?

+1

'(screenWidth - objWidth)/2' и' (screenHeight - objHeight)/2' должен работать, чтобы получить обычно необходимый верхний левый угол. – chris

+0

(screenWidth - objWidth)/2 = x и (screenHeight - objHeight)/2 = y right? –

+0

Да. Если это помогает, вы можете думать о 'screenWidth/2 - objWidth/2'. Первая часть получает центр экрана по горизонтали, а вторая часть идет влево на половину объекта, чтобы попасть туда, где должна стоять левая сторона. – chris

ответ

4

Основное «центрирование уравнения» просто:

center = (total_space - needed)/2; 

Это делит оставшееся пространство пополам, а это означает, что это так же слева, как справа, или выше и ниже. Он предполагает, что позиция относится к крайнему краю «левого» (или «верхнего») Y центра.

Для очень SimPE примера рассмотрим горизонтально центрирования объекта с needed = 6 в total_space 14:

(14 - 6)/2 = 4 

так, пытаясь графический дисплей:

needed = 6 
    / \ 
|----XXXXXX----| The 6 X:s are centered, 
|    | with 4 dashes on either 
\   / side. The total space 
    \  / between the |:s is 14. 
    \  /
total_space = 14 

Это для одного измерения только поэтому вы должны его вычислить дважды: один раз для X и один раз для Y. То, что эти два должны быть независимыми друг от друга следует быть очевидным из-за того, что они являются размеры; вот какие размеры! :)

Таким образом, подключив свои ценности мы получаем:

center_x = (320 - 25)/2 = 147 

center_y = (480 - 25)/2 = 227 

Я округляется вниз; это не равномерно делится в любом случае, поэтому вам придется выбирать метод округления. В C и C++ просто используя целочисленную арифметику, вы получите это автоматически, так как разделение будет выполняться с целыми числами.

+0

Это имеет большой смысл! : D спасибо –

+0

Какой лучший метод округления в C или C++? –

+0

что-то вроде: (num> 0.0)? пол (num + 0,5): ceil (num - 0,5); ? возможно, –

Смежные вопросы