|
2D-программирование Вопросы, касающиеся двумерного программирования |
17.01.2011, 23:56
|
#1
|
AnyKey`щик
Регистрация: 07.01.2011
Сообщений: 7
Написано 0 полезных сообщений (для 0 пользователей)
|
Проблема с быстрым перемещением Изображения
Задача: цепляем изображение Курсором и перетаскиваем.
Проблема: Image отстает при "быстром" перемещении курсора, а если сказать точнее - нужно передвигать оооочень аккуратно.
Кто знает как решить проблему?
Вот простой пример:
Graphics 800, 600
SetBuffer BackBuffer()
HidePointer
Global cursor=LoadImage("cursor.png")
Global image=LoadImage("image.jpg")
Global x = 400
Global y = 300
Repeat
If ImagesOverlap (cursor , MouseX(), MouseY(), image, x, y) And MouseDown(1) Then
x = MouseX()
y = MouseY()
EndIf
Cls
DrawImage image, x, y
DrawImage cursor, MouseX(), MouseY()
Flip
Until KeyHit(1)
End
|
(Offline)
|
|
18.01.2011, 00:17
|
#2
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Никак. Указатель мыши обновляется и рисуется отдельно от остальной графики и ГУИ в Винде. Он рисутеся чуть не прямо в видеопамять.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.01.2011, 01:49
|
#3
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Врет. Попросту запоминаем, если MouseHit() и мышь пересекает картинку, запоминаем координаты (относительные) щелчка+Переменную Var в true, потом в цикле
if(MouseDown() and Var)
координаты картинки=кординаты мыши-относительные координаты
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.01.2011, 01:57
|
#4
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Используй фантазию, на блице многое сделать можно.
Graphics3D 800, 600, 32, 0
SetBuffer BackBuffer()
HidePointer
Global cursor=LoadImage("cursor.png")
Global image=LoadImage("image.jpg")
Global x = 400
Global y = 300
action = 0
Repeat
If action
If Not MouseDown( 1 )
action=0
Else
x = x + MouseXSpeed()
y = y + MouseYSpeed()
End If
Else
If ImagesOverlap (cursor , MouseX(), MouseY(), image, x, y) And MouseDown(1)
action=1
MouseXSpeed()
MouseYSpeed()
End If
EndIf
Cls
DrawImage image, x, y
DrawImage cursor, MouseX(), MouseY()
Flip
Until KeyHit(1)
End
Последний раз редактировалось RBK, 18.01.2011 в 02:51.
Причина: лишние команды в коде
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.01.2011, 02:25
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Сообщение от RBK
Используй фантазию, на блице так многое сделать можно.
Repeat
...
RenderWorld
Cls
...
Flip
Until KeyHit(1)
|
Можно ржать? Или так правда нормально работает? Что-то я запамятовал... хотя кажется что ржать можно
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.01.2011, 02:28
|
#6
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Да тут над всеми кроме сквида можно ржать, за хардварным курсором никогда неуспеть.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.01.2011, 02:38
|
#7
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Сообщение от SBJoker
Да тут над всеми кроме сквида можно ржать, за хардварным курсором никогда неуспеть.
|
А код я так, для красоты написал.
pax да, что-то пропустил пару лишних команд, когда правил код. Сейчас исправлю.
|
(Offline)
|
|
18.01.2011, 08:14
|
#8
|
AnyKey`щик
Регистрация: 07.01.2011
Сообщений: 7
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
RBK спасибо, код то что надо.
Фантазии нет, потому и обращаюсь к "фантазерам".
|
(Offline)
|
|
18.01.2011, 12:27
|
#9
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Обращайся конечно, здесь всегда есть люди способные ответить на сложный (или не очень сложный) вопрос.
Фантазию надо развивать, она важный элемент творчества.
|
(Offline)
|
|
18.01.2011, 12:57
|
#10
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Как вариант - отключить виндовый курсор и нарисовать свой собственный.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.01.2011, 13:45
|
#11
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Сообщение от ABTOMAT
Как вариант - отключить виндовый курсор и нарисовать свой собственный.
|
Ответил не глядя? Молодец!... телепатом будешь.
(см. код в первом посте, курсор уже отключен и нарисован собственный)
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо RBK за это полезное сообщение:
|
|
18.01.2011, 16:10
|
#12
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Сообщение от RBK
А код я так, для красоты написал.
|
если ты такой умный то что сам неразберешся?
А если по делу то как ты считаешь, вычисление скоростей мышки по X и Y происходит в тоже самое время как ты желаешь узнать координаты мышки, или всёже немного раньше?
Правильным будет по зажатию мышки выставлять флаг указывающий что начан процес Drag&Drop запоминать начальное положение картинки и курсора.
Далее рисовать курсор по координатам, а картинку по координатам расчитываемым по формуле:
new_image_x = last_image_x + (current_cursor_x - last_cursor_x)
и аналогично для y.
По отпускании мыши мы можем провреить допустимость такого перемещения и если надо отменить его (просто востановив положение картинки по предварително сохраненым координатам), или скорректировать и утвердить полученные координаты по выше приведенной формуле в качестве текущих.
Касаемо твоего кода, можно попробывать тупо вычислять новое положение картинки после рисования курсора по координатам. Хотя асинхронность изменения координат мыши непозволит достигнуть требуемой синхронизации без фиксации координат в переменных и вычисления скоростей перемещения на их основе).
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.01.2011, 17:09
|
#13
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
А код я так, для красоты написал.
|
SBJoker это был сарказм, а не вопрос.
Давай разберем код вместе, если запустить и посмотреть не хочешь:
Правильным будет по зажатию мышки выставлять флаг указывающий что начан процес Drag&Drop запоминать начальное положение картинки и курсора.
|
см. перем. action
А если по делу то как ты считаешь, вычисление скоростей мышки по X и Y происходит в тоже самое время как ты желаешь узнать координаты мышки, или всёже немного раньше?
...
Далее рисовать курсор по координатам, а картинку по координатам расчитываемым по формуле:
new_image_x = last_image_x + (current_cursor_x - last_cursor_x)
и аналогично для y.
|
Да, в тоже самое время как я желаю узнать
speed_cursor_x=speed_cursor_x+(current_cursor_x - last_cursor_x) вот както так работает MouseXSpeed()
По отпускании мыши мы можем провреить допустимость такого перемещения
|
Эта проверка уже реализована в самом блитце.
P.S. SBJoker ты сообщай кому пишешь ответ, а то возможны такие недоразумения.(в ответе ничего менять не буду, пусть будет комментарием к коду, пост№4)
|
(Offline)
|
|
18.01.2011, 17:55
|
#14
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
__________________
|
(Offline)
|
|
18.01.2011, 18:13
|
#15
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Проблема с быстрым перемещением Изображения
Ладно, на вопрос темы мы все ответили, новых вопросов не было: тему можно закрывать
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:39.
|