В общем:
Хочу сделать игру - пошаговую изометрическую стратегию.
Я начинающий программист, нормально знаю только vb6 (с API особо не дружу, с дирексом вообще).
Скачал вб 2010. Встал вопрос об прозрачности.
А вообще, встал вопрос - на чем мне писать.
Критерии поиска таковы:
Присутствие прозрачности для обьектов (рисунков, анимаций, Надписей (лабелов)), относиттельно других.
Я так понимаю, что должно выглядеть вот так: Прозрачность работает тогда, когда обьект с прозрачснотью находится над другим обьектом. Например если персонаж стоит за деревом, то срабатывает прозрачнсоть дерева и видно персонажа. Если персонаж перед деревом, то наоборот.
Я уже сделал простетский редактор карт и его тестер (т.е. На редакторе можно создавать карту, заполнять гарфикой, таскать. На тестере загружается карта, на ней 2 персонажа (тупо в клекте цифра - номер персонажа, т.к. не стал делать сразу полноценные рисунки, для теста делал все-же)).
Вот так выглядит поле - http://s017.radikal.ru/i417/1111/1b/9f6205e0e651.jpg
Вот так выглядит проба игры (мини тестер) - http://s54.radikal.ru/i144/1111/d4/5308d2911972.jpg
Хочу сделать карту вот такой:
Это зарисовка
http://s41.radikal.ru/i092/1111/62/62ace3a82820.gif
http://s017.radikal.ru/i438/1111/68/111f3b9e1713.gif
Получится должно что-то вроде этого (недавно нашел на этом форуме)
http://i076.radikal.ru/1111/80/a0bc2babd912.jpg
На чем это можно реализовать? (Я знаю, что на этом форуме просто куча подобных тем, однако меня интересует не готовый движок, а именно язык программирования, если конечно такое есть в обычном языке, а не в граф. движке). Написал фигню, но все-же.
Посоветуйте пожалуйста.
п.с. Как именно делать карту - говорить не надо. Хочу сделать сам.)
Все что хочу узнать - на каком языке есть нормальная прозрачность.
То есть: Сделал карту, на нее поместил обьекты (деревья, персонажей и т.д). Что бы эти обьекты были над картой, и карту не надо было перерисовывать каждый раз (а только один раз нарисовать в начале).
FireDay
На счет прозрачности:
Она включена всегда.
Объекты перед отрисовкой сортируются от дальнего к ближнему, следовательно те объекты, что дальше будут отрисованы первее, те что ближе - последними, частично затерев при этом дальних.
nes
Хм, предположим, что картинка с девушкой - поле (рисуется первым). На него накладывается персонаж (черная клякса), но не рисуется на самом поле, а просто лежит над ним.
Вот что выходит: http://s017.radikal.ru/i419/1111/fa/53147cd36607.jpg
А надо, чтобы окошко кляксы быо прозрачным, а не серым (а сейчас, как я понимаю, прозрачность имитируется цветом формы).
FireDay
Рисовать формами как-то стремно )
Лучше используй какой-нить графический апи OpenGL или Direct3D, для упрощения можешь взять готовый игровой движок.
Там будет возможность рисовать спрайты с прозрачностью.
Хм... Тогда вопрос по Direct3D (который есть в Вб 2010, да?)
Если работать на дирексе, то все мяется (в плане программирования), верноя понимаю, что нельзя будет использовать готовые обьекты вроде кнопок, текст боксов и т.д? Или нет? это просто как Изображение, в котором я размещаю обьекты (спрайты)?
п.с. Прогуглил про Спрайты. Это именно то, что мне надо (нарисовал 1ин раз и все).
FireDay
Да, кнопки и другие контролы тогда предется делать вручную, порт OpenGL тоже должен быть для VB
Большая ли разница между DirectX 8 (в vb6) и DirectX в вб 2010?
Визуально она есть? (для простой 2д гарфики)?
п.с. А разве дирекс и ОпенГл предназначены не только для работы с 3д?
FireDay
Если в DX/OpenGL, то вам придется задавать (рисовать) альфа-канал, то есть маску рисунка по контуру
Можно самому ее строить по ключевому цвету, там повозиться с доступом к памяти битмап
Еще можно посмотреть, если у стандартного компонента Image (или Picture, как там в VB) свойство типа TransparentColor
FireDay
2D это частный случай 3D
FireDay
Это ерунда, я вот рисую в OpenGL на форму со стандартными контролями в BCB. Надо просто создавать контекст OpenGL не для всего экрана, а для какого-нить вложенного оконного контроля, куда и рисуете. В DX наверное также
Спрайты - это именно то что вам надо, вопрос через что их реализовывать
Может не мучаться с GL, а использовать VB-шный Picture.Canvas, для вашей графики его скорости хватит. Только тогда нужно выводить маску, затем картинку, используя битовые операции, это и есть спрайт. Например маска - белый объект на черном фоне, выводится через OR, затем объект через AND. Только лучше все рисовать в буферный битмап, размером с экран, а потом выводить его целиком, во избежание мерцания
nes
Ясно.
Aslan
Мои первые наброски на этом и построенны (если я правильно понял что такое Picture.Canvas, реализовал через похожую вещь, т.е. с помощью наложения маски и картинки поверх друг друга):
Делал через API BitBlt для vb6
Вот пример из кода:
BitBlt Pic1.hDC, xq, yq, mBOX(kk).ScaleWidth, mBOX(kk).ScaleHeight, mBOX(kk).hDC, 0, 0,vbSrcAnd
BitBlt Pic1.hDC, xq, yq, mBOXmask(kk).ScaleWidth, mBOXmask(kk).ScaleHeight, mBOXmask(kk).hDC, 0, 0, vbSrcPaint
Не хочу больше возиться с масками (это слишком рутинная работа).
Хочу работать с более рентабельными вещами, где не будет такого гимора. То есть с работающей прозрачностью.
Посоветуйте что-то...
п.с. Оправдается ли использование DirectX 8 (в vb6) для реаизации моей идеи?
п.п.с. Я так понимаю в Дирексе стоит прорисовать обькт один раз, а потом с ним можно работать. Или в дирексе есть камера, смотрящая на обьекты, которые я расположу? Тогда выйдет, что изометрию придется делать из 3д моделей? (хм.. а как вариант, ведь карту будет удобнее в 3 сделать, а персонажей, как картинки - спрайты).
Хм...
Вот еще идея, скажите, стоит ли так делать:
Т.к. У меня нету возможностей делать 3д модели, не говоря об кучи анимаций к ним, которые придется делать, я хочу сделать рисованных персонажей.
Карту сделаюв 3д, а персонажей и обеькты (травку, растения, деревья, колодцы и прочие) через спрайты. И сделать возможность вертеть карту (но не полностью - без возможности наклонов по горизонтали). Когда камера будет поворачиваться в какую либо сторону и проходить порог в N градусов, спрайты будут разворачиваться, имитируя разворот персонажей/обьектов относительно карты. М?
п.с. Хотел еще узнать:
Предположим я хочу, чтобы у анимации персонажа-война была возможность заменять вещи (для начала оружие и щит).
Я представляю себе это так:
Делается первая анимация (например удара персонажа), но без меча/щита в руках (но делается так, как будто они есть), а потом, они накладываются поверх персонажа так, чтобы правильно отображться). Но тут один минус. Если делать еще возможность смены вещей (шмота, к примеру брони) персонажа, то с накладываемыми анимациями оружия можно что-то делать. Думаю, что не понятно обьяснил, по этому поясню: если персонаж стоит боком, то щит видин на половину (т.к. часть щита не видна за самим персонажем), как это реализовать без обрезания щита руками (т.е. чтобы накладываемая анимация была уже обрезанная под персонажа).
п.с. Как написал - пришло решение в голову. Скажите, верно ли я думаю: Сделать так: сначала накладывается щит, затем персонаж, затем шмот на него, затем меч
p.s. Эта анимация персонажа-война - частный случай, когда персонжа стоит в профиль и смотрит туда ->
FireDay
> Не хочу больше возиться с масками (это слишком рутинная работа)
> Хочу работать с более рентабельными вещами, где не будет такого гимора. То есть с работающей прозрачностью
Почему бы не завернеть все это в класс? ИМНО, это самое простое
DX и OpenGL - это просто рендер, то есть вам надо переисовывать все объекты каждый кадр. Камеры там задаются матрицами, но вам это не нужно. Делают 2D через 3D просто рисуя квадратики с текстурами, но там писать кода больше придется
FireDay
> И сделать возможность вертеть карту (но не полностью - без возможности наклонов по горизонтали). Когда камера будет поворачиваться в какую либо сторону
> и проходить порог в N градусов, спрайты будут разворачиваться, имитируя разворот персонажей/обьектов относительно карты. М?
А в чем вопрос?
> Сделать так: сначала накладывается щит, затем персонаж, затем шмот на него, затем меч
Да, совершенно верно
Тема в архиве.