Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.088 c
3-1100266024
REA
2004-11-12 16:27
2004.12.12
Положение записи в Grid


1-1101802891
Гриша
2004-11-30 11:21
2004.12.12
Сканирование файла


3-1100495043
Explorer
2004-11-15 08:04
2004.12.12
Учет документации


6-1096747272
denkop
2004-10-03 00:01
2004.12.12
Передача структуры которая содержит поле типа pointer


1-1101413769
Homa_Programer
2004-11-25 23:16
2004.12.12
помогите Юзеру





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский