{{notification.text}}

MirGames

Valera3D
22.09.07 23:26
0
Всем привет!
У меня есть проблема. Имеется Level-editor всё нормально,
но нужно чтобы курсор передвигался не плавно, а как бы
"перескакивал" на 50. как это сделать? Я пытался подумать сам, но у меня не получается. :(
Пожалуста, помогите!
#1
Limited Edition
22.09.07 23:39
0
curpos.x := mousepos.x div interval;
curpos.y := mousepos.y div interval;
где interval - нужный тебе шаг.
Отредактировано: 22.09.07 23:44
#2
22.09.07 23:39
0
Valera3D
"но у меня не получается" - Думать? :D
Код
X,Y - Координаты мышки.
Size = 50;
Reselt.X:= Round(X/Size)*Size;
Reselt.Y:= Round(Y/Size)*Size;


PS: Блин, не успел.
Отредактировано: 22.09.07 23:42
#3
22.09.07 23:40
0
curpos.x := mousepos.x div interval * interval;
curpos.y := mousepos.y div interval * interval;
наверно?
#4
Limited Edition
22.09.07 23:47
0
Цитата
curpos.y := mousepos.y div interval * interval;
наверно?

ну да, ну да
#5
Valera3D
22.09.07 23:56
0
Так что йз этого именно? :wacko:
#6
Limited Edition
23.09.07 00:24
0
Valera3D, учись програмировать! ;)
curpos.x := mousepos.x div interval * interval;
curpos.y := mousepos.y div interval * interval;
#7
Valera3D
23.09.07 00:33
0
Всем спасибо! Всё работает, почти. Но с "почти" я и сам разберусь. :)
RzCoDer
Вот я и учусь! :)
#8
Dan
The One
23.09.07 01:36
0
мне кажется так будет правильнее:
curpos.x := Trunc(mousepos.x / interval) * interval;
curpos.y := Trunc(mousepos.y / interval) * interval;
#9
Limited Edition
23.09.07 01:43
0
Dan, зачем для заведомо целых чисел выполнять операции с плавающей точкой?
#11
23.09.07 02:36
0
RzCoDer
А кто сказал, что они заведомо целые?
#12
Dan
The One
23.09.07 02:50
0
RzCoDer
Затем что оператор div округляет результат (0.5 => 1)
что приведёт к смещению результата на 50%.
#13
Limited Edition
23.09.07 02:56
0
Adler
это сказала здравая логика, подсказав что координаты курсора следует хранить в целых числах.

брррр, дан, напутал меня... =(
Отредактировано: 23.09.07 03:40
#14
Dan
The One
23.09.07 03:16
0
RzCoDer
Эх... стыдно должно быть...
Предположим курсор на тридцатом пикселе (30), т.е. в пределах нулевого интервала
делим 30 на 50 (=0.6) при использовании div получаем 1, т.е. результат получается первый интервал, т.е. не верный. (погрешность, как я уже сказал, половина интервала!)

$'talker
Цитата

shr 1
вместо
div
тогда

вообще глупость сказал.
shr подобно делению только в том случае если делимое и делитель являются не отрицательной степенью двойки. в данном случае числа не ограничены степенями двойки.
#15
Limited Edition
23.09.07 03:39
0
Dan, тьфу ты. фигню говоришь. div - целочисленное деление, возвращает целую чать от результата, 30 div 50 = 0.

стыдно должно быть ;)
Отредактировано: 23.09.07 03:41
#17
Dan
The One
23.09.07 03:44
0
RzCoDer
Правда... ошибся... каюсь... стыдно...
#18
23.09.07 05:44
0
RzCoDer
Моя логика сказала, что лучше считать, что координаты нецелые т.к. универсальнее.

Да ладно, и в том и в другом случае правильно. Как не крути всё равно перескакивать на одно и то же число будет. Разница только в сдвиге на 0,5 интервала.
#19
23.09.07 10:15
0
А теперь тоже самое для изометрической проекции ;)
#20
mov, просто mov
23.09.07 16:42
0
Shirson
хы :) если я ещё не забыл
есть поле к примеру 4х4
позиция 0,0 клетки будет -(w div 2), -(h div 2)
позиция 1,1 клетки будет w,h
позиция 2,2 клетки будет (w div 2), (h div 2) // где w и h ширина и высота прямоугольника в котором нарисован изометр. спрайт.
тоесть если номер клетки чётный то её позиция равна (xN - 1) + (w div 2), (yN - 1) + (h div 2)
если нет то xN, yN
определять какая клетка под курсором через спрайтег в котором нарисовона чёрная изометрическая клетка, а углы раскрашены разными цветами
верхний левый красный, верхний правый зелёный
нижний левый синий, нижний правый жолтый
а потом как бы "подставлять" его под курсор ))
получать координаты таким способом

X := mouse.x mod w;
Y := mouse.x mod h;

потом проверять ) если x, y попадает на чёрную зону то номер клетки - нечётный

(x div w) + 1
(y div h) + 1

если попадает на один из углов, к примеру на верхний левый то номер клетки - есть

x div w
y div h

если попадает на верхний правый то

(x div w) + 2
y div h

на нижний левый

x div w
(y div h) + 2

на нижний правый

(x div w) + 2
(y div h) + 2

вот и сё :)))

p.s. мб что не правильно когда я его писал та :)))


#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}