Суббота, 04 Мая 2024, 06:07

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Отрисовка спрайтов в определенную позицию (Direct3D 9 | c++)
Отрисовка спрайтов в определенную позицию
cradisДата: Вторник, 24 Августа 2010, 20:06 | Сообщение # 1
был не раз
Сейчас нет на сайте
Никак не могу понять, как сделать так, чтобы в месте, куда я ткнул указателем, в зависимости от координат рисовался квадратный спрайт в определенную ячейку сетки(сетка есть все окно).
У спрайт хандлера есть метод Draw, у которого 3ий параметр это позиция. Но вот в чем проблема, чем ниже место в окне, куда я тыкаю, тем кривее рисуется спрайт.
Т.е. если тыкнуть где-то в координатах окна (0,10), то левый верхний угол спрайта будет в точке, куда я ткнул, но чем ниже, тем угол спрайта все дальше от указателя.
nilremДата: Вторник, 24 Августа 2010, 20:13 | Сообщение # 2
Просветленный разум
Сейчас нет на сайте
Quote (cradis)
Т.е. если тыкнуть где-то в координатах окна (0,10), то левый верхний угол спрайта будет в точке, куда я ткнул, но чем ниже, тем угол спрайта все дальше от указателя.

А как ты определяешь координаты тыка?
Координаты оконного приложения отличаются от полноэкранного.


Windmill 2

WindMill 2D Game Engine
cradisДата: Среда, 25 Августа 2010, 01:33 | Сообщение # 3
был не раз
Сейчас нет на сайте
Через DirectInput, координаты я получаю правильные, оконные.

Добавлено (25.08.2010, 01:33)
---------------------------------------------
http://slil.ru/29596671
Вот наглядный пример.

nilremДата: Среда, 25 Августа 2010, 11:11 | Сообщение # 4
Просветленный разум
Сейчас нет на сайте
cradis,

У тебя размер BackBuffer-а не соответствует размерам клиентской области окна.


Windmill 2

WindMill 2D Game Engine
cradisДата: Среда, 25 Августа 2010, 13:35 | Сообщение # 5
был не раз
Сейчас нет на сайте
Задал размеры явно - ничего не изменилось. Размер буфера равен размеру окна, так?
Может тут дело именно в функции Draw, а не в настройках d3d?

Добавлено (25.08.2010, 13:35)
---------------------------------------------
Заменил вывод на SetTransform спрайта, ничего не изменилось. Видимо все-таки в настройках дело.

Сообщение отредактировал cradis - Среда, 25 Августа 2010, 13:15
nilremДата: Среда, 25 Августа 2010, 13:52 | Сообщение # 6
Просветленный разум
Сейчас нет на сайте
Quote (cradis)
Размер буфера равен размеру окна, так?

Нет. У окна есть границы и клиентская осласть. Получить размер клиентской области можно функцией GetClientRect.
Можно оставить параметры BackBufferWidth, BackBufferHeight со значением по умолчанию, те вообще их не задавать. в этом случае размер буфера автоматически будет равен области рендеринга.

Quote (cradis)
Может тут дело именно в функции Draw, а не в настройках d3d?

Нет, один из признаков несоответствия размеров - мерцание курсора в окне.

Вот:

Размер черного квадрата равен максимуму координат в заголовке, но, как видиш, свободное место по краях осталось.

Прикрепления: 9276051.jpg (31.5 Kb)


Windmill 2

WindMill 2D Game Engine
cradisДата: Среда, 25 Августа 2010, 14:00 | Сообщение # 7
был не раз
Сейчас нет на сайте
Спасибо! Убрал в настройках буфера задание ширины и высоты и теперь все работает, как надо!
Форум игроделов » Программирование » C/C++ » Отрисовка спрайтов в определенную позицию (Direct3D 9 | c++)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг