Форум: "Игры";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизФункция странно работает... Найти похожие ветки
← →
MonoLife (2004-08-13 14:20) [0]Здравствуйте!
Как-то задал я вопрос (MonoLife (08.08.04 06:56) ) о перетаскивании
спрайтов мышью. Добрый человек (Servelat) подсказал
мне, что для непрозрачных спрайтов подойдет функция
DXSpriteEngine.Engine.GetSpriteAt(X, Y) : TSprite.
Но как-то странно она работает:
пока картинки были 50х50 или ширина картинки больше
высоты, то все нормально - мышкой за любую область
хватаю и таскаю себе куда хочу.
Но если высота картинки больше. чем ширина, то ухватить ее
можно только, примерно, за середину.
Хотя DXSpriteEngine.Engine.Items[i].BoundsRect совпадает с point(X,Y) при
MouseDown.
В чем тут может быть загвоздка? Сам не могу разобраться.
Ответьте, пожалуйста. Буду рад, если Servelat откликнется.
Спасибо.
← →
Servelat © (2004-08-13 20:28) [1]Откликнусь :) .
Код в студию или мне на мыло.
← →
MonoLife (2004-08-14 04:37) [2]Код на странице с предыдущим (08.08) вопросом (09.08.04 08:32) [10] "Немного о Sprite..."
← →
MonoLife (2004-08-14 04:38) [3]PS: Загрузи картинку по высоте больше, чем ширине и увидишь...
← →
Servelat © (2004-08-14 14:31) [4]На будущее:
Или ссылку надо было дать на ту ветку с кодом, или в ней же и писать, а то пока я нашел...
Причину странного поведения я обнаружил: по видимому это ошибка в самом DelphiX"е, хотя возможно функция GetSpriteAt просто служит неведомым мне целям. Так или иначе, 430 строка модуля DXSprite (эта строка относится к функции GetSpriteAt)выглядит так:
if Sprite.Visible and PointInRect(Point(Round(X), Round(Y)), Bounds(Round(Sprite.X), Round(Sprite.Y), Sprite.Width, Sprite.Width)) then
Прошу обратить внимание на конец строки: там стоит два раза Sprite.Width. Так вот, если второй Sprite.Width поменять на Sprite.Height, то все работает так, как это мною ожидалось, никаких проблем.
Однако если не хочется изменять код DelphiX"а (ведь при изменении его твоя прога будет нормально компилиться только на твоем компе с измененным DelphiX"ом), то можно пойти другим путем: скопировать эту функцию в свой модуль, обозвать как-нибудь по другому и исправить как это надлежало сделать. Именно это я и сделал в своем примере, советую тебе его скачать, там я, к тому же, выкинул половину твоих старых переменных за ненадабностью, так что заценяй.
http://pavel-k.fromru.com/Sample2.zip
ЗЫ
И заведи себе мыло, если у тебя его нету, а то мне сомнительно, что это все интересно широкой публике, я бы тебе на мыло пример послал и все.
ЗЗЫ И если пишешь посты в Блокноте, то включи галку "Перенос по словам", и пиши отделяя Enter"ами только абзацы, а то твои посты странно выглядят.
← →
MonoLife (2004-08-14 16:03) [5]>Servelat>
Принял к сведению. Спасибо.
Думаю, что тем кто еще юзает DelphiX
будет интересна эта тема. Ведь я сам не мало подчерпенул
из форума. За прочие советы спасибо.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c