Задавайте вопросы по PopCap Framework в этой ветке форума, если вопрос небольшой. Или создавайте отдельную тему для основательного вопроса.
Как чинить "resolution bug"?
http://forum.fischeronline.de/index.php?topic=5763.0
MNAndrew
Обычно его не чинят, потому что это не bug. А как бы хотелось чтобы выглядела игра на разрешении, скажем 1024х600, если она сделана под разрешение 1024х768?
the_siv
> Обычно его не чинят, потому что это не bug.
Т.е. полоса мусора снизу это не баг? А что это?
Все паблишеры заявили, что это баг и его надо чинить.
JPoag сказал, что это баг.. и исправил его в SexyKanji.
> А как бы хотелось чтобы выглядела игра на разрешении, скажем 1024х600, если она сделана под разрешение 1024х768?
Ну также.. как выглядит игра сделанная под разрешение 1024x600 на разрешении 1024x768... бэкбуфер рисуется на фронтбуфер.. в зависимости от флагов пытается или не пытается сохранить пропорции...
Еще вопрос - как в попкапе отрисовать картинку по маске? Ну вот например блик по кнопке пустить..
MNAndrew
>>Т.е. полоса мусора снизу это не баг? А что это?
Полоса мусора снизу - это, конечно, баг. Я имел ввиду, что когда программа не работает на том железе, на котором она и не должна работать - это не баг. Тут просто надо составлять разговор с конкретным паблишером, если это будет обязательным условием выхода игры, то конечно придётся чинить. Просто мне пока что не приходилось это чинить, слава богу. Если скажут, я начну искать откуда ноги растут с ф-ций DDInterface::Init и DDInterface::Redraw. У меня нет нетбука и я не могу посмотреть поведение. А зависит ли как нибудь поведение программы от режима отрисовки c 3D/без 3D (это который в дебажном режиме Ctr+Alt+D переключается по Shift+F8)?
>>Еще вопрос - как в попкапе отрисовать картинку по маске?
Возможности рисовать по маске в попкапе нет. И добавить её самому в общем случае будет довольно таки сложно (если речь идет о добавлении возможности отрисовки по маске с использованием мультитекстурирования), хотя бы потому что DDImage может представляться не одной LPDIRECTDRAWSURFACE7, а несколькими (если интересно, смотреть в сторону TextureData в файле D3DInterface.h), плюс ко всему и картинку и маску надо будет отсекать по ClipRect, потом находить пересечение получившихся многоугольников (а в общем случае и тестура и маска могут быть произвольно повёрнуты, перемещены и сошкалированны). Ну это в общем случае. По идее можно сделать какой-нибудь частный случай, если сильно надо. Плюс есть обходные решения.
>>Ну вот например блик по кнопке пустить..
Самый простой случай - загрузить блик в отдельную картинку и рисовать его поверх кнопки с режимом отрисовки Graphics::DRAWMODE_ADDITIVE. Если нужна именно маска и устраивает угловатость, то можно вручную разбить на треугольники и отрисовать их через g->DrawTrianglesTex.
the_siv
> Полоса мусора снизу - это, конечно, баг. Я имел ввиду, что когда программа не
> работает на том железе, на котором она и не должна работать - это не баг. Тут
> просто надо составлять разговор с конкретным паблишером, если это будет
> обязательным условием выхода игры, то конечно придётся чинить. Просто мне пока
> что не приходилось это чинить, слава богу. Если скажут, я начну искать откуда
> ноги растут с ф-ций DDInterface::Init и DDInterface::Redraw. У меня нет нетбука
> и я не могу посмотреть поведение. А зависит ли как нибудь поведение программы
> от режима отрисовки c 3D/без 3D (это который в дебажном режиме Ctr+Alt+D
> переключается по Shift+F8)?
Нет.. от того, есть ускорение или нет эта бага не зависит... да и с нетбуками она никак не связана, разве что очень косвенно.. там все дело в том, что размер бэкбуфера не может быть больше размера фронт-буфера ( такое ограничение 7го дха? )... а фронт буфер не может быть больше разрешения экрана.. т.е. вот у меня на буке максимальное разрешение - 1280*800.. достаточно создать приложение 1280*1024 на попкапе и запустить его в фуллскрине, чтобы наблюдать этот баг..
>Если скажут, я начну искать откуда ноги растут с ф-ций DDInterface::Init и DDInterface::Redraw. У меня нет нетбука и я не могу посмотреть поведение
Так что можешь пробовать воспроизвести и починить...
>>Ну вот например блик по кнопке пустить..
>Самый простой случай - загрузить блик в отдельную картинку и рисовать его поверх кнопки с режимом отрисовки Graphics::DRAWMODE_ADDITIVE. Если нужна >именно маска и устраивает угловатость, то можно вручную разбить на треугольники и отрисовать их через g->DrawTrianglesTex.
Но ведь если кнопка не прямоугольная.. а с какой-то альфой ( например скругленные края ), то это уже не пройдет... для себя я решил это так, что руками блитил ( в том смысле, что лочил обе текстуры и сам складывал цвета в зависимости от альфы ). Вроде не тормозило, но у меня и кнопочки были маленькие..
MNAndrew
>>Так что можешь пробовать воспроизвести и починить...
Ну может как-нибудь займусь, как будет время.
>>для себя я решил это так, что руками блитил
Да, это ещё один вариант, как это делать. Ну обычно делается исходя из ситуации комбинацией подходов.
Еще вопрос - как сделать вайд-скрин как в роял инвой? Т.е. нарисовать что-то на добавочных черных полосах справа и слева?
MNAndrew
В конструкторе GameApp (или что там наследуется от SexyAppBase в текущем проекте) присвоить переменной "mWidescreenAware" значение true.
the_siv
> В конструкторе GameApp (или что там наследуется от SexyAppBase в текущем
> проекте) присвоить переменной "mWidescreenAware" значение true.
После это неправильно работают вайд-срин режимы ( некоторые ). Не по центру рисуется игра. Какие еще варианты есть?
MNAndrew
Игра рисуется правильно, просто смещается начало координат (вернее оно как и должно быть становится в левом верхнем углу).
Один из вариантов: в своём ирговом видгете в переопределённой ф-ции Draw смещать Graphics на нужное кол-во пикселей по x (mTransX на сколько я помню). Другой вариант делать тоже самое в самом попкапе в классе SexyAppBase там, где создаётся изначальный Graphics, в который всё рисуется, и смещать в нём. Рисовать в боковины можно сразу же после отрисовки игрового видгета.
Тема в архиве.