Страница: 1 |
Страница: 1 |
Вопрос: DirectX и мышь
Добавлено: 19.04.05 15:29
Автор вопроса: Skywalker | Web-сайт:
Public MouseX As Integer
Public MouseY As Integer
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
MouseX = Int(X)
MouseY = Int(Y)
End Sub
Public Sub DrawMouse(ByVal MX As Long, ByVal MY As Long, ByVal Size As Long)
rc.Top = MY
rc.Left = MX
rc.Bottom = MY + Size
rc.Right = MX + Size
Call ddsBack.BltFast(MouseX, MouseY, ddsMouse, rc, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT)
End Sub
Вот эта функция рисует вместо стандартной мыши мышь, загруженную из рисунка. Проблема вот в чем. При создании директиксом экрана с разрешением 640*480 все нормально, 800*600 тоже, а вот при 1024*768 рисунок мыши загружается и стоит на месте. Не подскажете в чем проюлема?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #1
Добавлено: 19.04.05 21:05
Форму ресайзишь?
Лично я в DX получал через GetCursorPos
ты типа хочешь курсор другой сделать? Тогда не лучше ли его просто поменять. Ато так от FPS будет зависеть.
Номер ответа: 2
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #2
Добавлено: 19.04.05 21:07
BONUS
Оптимизация. + 1руб в копилку быстродействия.
Номер ответа: 3
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #3
Добавлено: 19.04.05 21:14
rc.Top = MY
rc.Left = MX
rc.Bottom = MY + Size
rc.Right = MX + Size
Call ddsBack.BltFast(MouseX, MouseY, ddsMouse, rc, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT)
End Sub
Не забудь rc.Bottom & rc.Right менять на случай rc.Botton>SCREEN_HEIGHT; rc.right > SCREEN_WIDTH .
Если одна из этих заповедей не соблюдЁтся,то не будет рисовать.
П.С. Вот только как поменять курсор на "*.ani" не знаю.
Номер ответа: 4
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #4
Добавлено: 20.04.05 08:02
Ну да я хочу свой курсор сделать. Поменять его просто мне не нада, потому что он в разных местах должен изменяться и загрузка из картинок будет удобней. Так я что-то не понял в чем у меня проблема?
Номер ответа: 5
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #5
Добавлено: 20.04.05 20:27
Я не знаю в чём может быть проба. Ведь это просто. Привиди код.
Номер ответа: 6
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #6
Добавлено: 20.04.05 20:30
Кстати:
Public Sub DrawMouse(ByVal MX As Long, ByVal MY As Long, ByVal Size As Long)
rc.Top = MY
rc.Left = MX
rc.Bottom = MY + Size
rc.Right = MX + Size
Call ddsBack.BltFast(MouseX, MouseY, ddsMouse, rc, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT)
End Sub
можно сделать
Public Sub DrawMouse(ByVal MX As Long, ByVal MY As Long, ByVal Size As Long)
if ddsBack.BltFast (MouseX, MouseY, ddsMouse, rc, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT) then beep
End Sub
Если RC.all=0 тогда без проблем прорисуется. Я не знаю я составил своё: всё нормально. Мож те на мэйл кинуть? Сравнишь.
Номер ответа: 7
Автор ответа:
Дмитрий Щапов
Вопросов: 71
Ответов: 321
Профиль | | #7
Добавлено: 20.04.05 20:34
Мда.. Это нелегко но всё-же я так делал. если блт возвращает не 0, то я жму Ф2, и в ошибках DDRAW_ERRDRAW ищу ошибку с таким же номером. Это правда было когда меня уже просто бесить начинала.