Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 17.01.2011, 23:56   #1
Sora_Musoka
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
Вложения
Тип файла: rar imageMove.rar (5.9 Кб, 493 просмотров)
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 00:17   #2
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Проблема с быстрым перемещением Изображения

Никак. Указатель мыши обновляется и рисуется отдельно от остальной графики и ГУИ в Винде. Он рисутеся чуть не прямо в видеопамять.
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (18.01.2011)
Старый 18.01.2011, 01:49   #3
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Проблема с быстрым перемещением Изображения

Врет. Попросту запоминаем, если MouseHit() и мышь пересекает картинку, запоминаем координаты (относительные) щелчка+Переменную Var в true, потом в цикле
if(MouseDown() and Var)
координаты картинки=кординаты мыши-относительные координаты
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Arles (18.01.2011)
Старый 18.01.2011, 01:57   #4
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Sora_Musoka (18.01.2011)
Старый 18.01.2011, 02:25   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Проблема с быстрым перемещением Изображения

Сообщение от RBK Посмотреть сообщение
Используй фантазию, на блице так многое сделать можно.
Repeat
...
RenderWorld

Cls
...
Flip	
Until KeyHit(1)
Можно ржать? Или так правда нормально работает? Что-то я запамятовал... хотя кажется что ржать можно
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (18.01.2011)
Старый 18.01.2011, 02:28   #6
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблема с быстрым перемещением Изображения

Да тут над всеми кроме сквида можно ржать, за хардварным курсором никогда неуспеть.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (18.01.2011)
Старый 18.01.2011, 02:38   #7
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений
(для 166 пользователей)
Ответ: Проблема с быстрым перемещением Изображения

Сообщение от SBJoker Посмотреть сообщение
Да тут над всеми кроме сквида можно ржать, за хардварным курсором никогда неуспеть.
А код я так, для красоты написал.

pax да, что-то пропустил пару лишних команд, когда правил код. Сейчас исправлю.
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 08:14   #8
Sora_Musoka
AnyKey`щик
 
Регистрация: 07.01.2011
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Проблема с быстрым перемещением Изображения

RBK спасибо, код то что надо.

Фантазии нет, потому и обращаюсь к "фантазерам".
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 12:27   #9
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений
(для 166 пользователей)
Ответ: Проблема с быстрым перемещением Изображения

Обращайся конечно, здесь всегда есть люди способные ответить на сложный (или не очень сложный) вопрос.

Фантазию надо развивать, она важный элемент творчества.
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 12:57   #10
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Проблема с быстрым перемещением Изображения

Как вариант - отключить виндовый курсор и нарисовать свой собственный.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (18.01.2011)
Старый 18.01.2011, 13:45   #11
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений
(для 166 пользователей)
Ответ: Проблема с быстрым перемещением Изображения

Сообщение от ABTOMAT Посмотреть сообщение
Как вариант - отключить виндовый курсор и нарисовать свой собственный.
Ответил не глядя? Молодец!... телепатом будешь.

(см. код в первом посте, курсор уже отключен и нарисован собственный)
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо RBK за это полезное сообщение:
Arles (18.01.2011), L.D.M.T. (18.01.2011), pax (18.01.2011), Reizel (18.01.2011)
Старый 18.01.2011, 16:10   #12
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (18.01.2011)
Старый 18.01.2011, 17:09   #13
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 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
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Проблема с быстрым перемещением Изображения

__________________
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 18:13   #15
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений
(для 166 пользователей)
Ответ: Проблема с быстрым перемещением Изображения



Ладно, на вопрос темы мы все ответили, новых вопросов не было: тему можно закрывать
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 17:01.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com