• Лови промокод з яким знижка 50 грн - promo50grn

УДАЛИТЬ

Статус: Offline
Реєстрація: 04.09.2011
Повідом.: 192
УДАЛИТЬ

УДАЛИТЬ
 

Вкладення

  • баг.jpg
    баг.jpg
    36 КБ · Перегляди: 98
Останнє редагування:
значит нужно маску перед передачей в процедуру тоже поворачивать, также как битмапу, ну и маску соответственно не использовать. А затем уже трансформированную маску передавать туда куда ты уже передаешь.

П.С. скорее всего процедура так и реализована, и маску использует чисто как константный параметр без трансформации.
 
Останнє редагування:
значит нужно маску перед передачей в процедуру тоже поворачивать, также как битмапу, ну и маску соответственно не использовать. А затем уже трансформированную маску передавать туда куда ты уже передаешь.

П.С. скорее всего процедура так и реализована, и маску использует чисто как константный параметр без трансформации.

нет вы не поняли всё трансформируется норм. при повороте например на 156 градусов или на 314 и т.д. - ВСЕ НОРМ!
баг вылезает ТОЛЬКО при повороте на 180 градд41ов



Вот собственно с картинка. (в вверхнем левом углу - 181 градус!!!)
 

Вкладення

  • баг.jpg
    баг.jpg
    36 КБ · Перегляди: 76
Останнє редагування:
тогда без долгого анализа, можно предложить при 180 градусах инвертить маску, и дело с концом. можно конечно и неделю потратить на борьбу с повстанцами, но тут очевидно что проблема внутри, а блэкбоксом можно очень долго искать решение.

пробовали играться с координатами угла маски?
чем транформируете точки?
 
тогда без долгого анализа, можно предложить при 180 градусах инвертить маску, и дело с концом.
Дело в том что бывает иногда оно выводит и нормально при 180 градусах)))
чем транформируете точки?

p[0].x = int(x0 + (x - x0) * cos(a) - (y - y0) * sin(a));
p[0].y = int(y0 + (y - y0) * cos(a) + (x - x0) * sin(a));

Проблема явно в функции так как для маски я передаю только координаты угла и все. Поэтому подумал что если кто-то пытался делать игры на винапи - то он явно должен был столкнуться с такой проблемой
 
смотрели явно при 180 какие координаты в массиве при дебаге? верны ли они?

если "иногда бывает", то тут попахивает неверным преобразованием типов. Вы преобразуете в int, а в формуле cos,sin возвращают плавающую точку, еще и double. возможно беда в этом
 
смотрели явно при 180 какие координаты в массиве при дебаге? верны ли они?

если "иногда бывает", то тут попахивает неверным преобразованием типов. Вы преобразуете в int, а в формуле cos,sin возвращают плавающую точку, еще и double. возможно беда в этом

Убрал инт:
Код:
p[0].y = y0 + (y - y0) * cos(a) + (x - x0) * sin(a);
НЕ помогло.

Однако проблему решил, только не совсем понял "почему так?".
Переменные x,y, x0, y0 - имели тип double.

Изменил на инт - БАГ ПРОПАЛ!!!!:клас::yahoo:
Только я не пойму в чем подвох? всеравно результат выражения "y0 + (y - y0) * cos(a) + (x - x0) * sin(a)" - будет double
 
почитайте про преобразование типов. при какой операции, в каком приоритете и в какую строну от операнда преобразуются результаты. у вас не только конечный результат, каждая арифметическая операция возвращает результат, и при разности типов операндов приводит результат к какому-то из типов. А вот к какому, можете поковыряться в своем коде если есть желание, и почитать в книжках об этом.
 
ещё один вопрос. У меня в игре есть основной цикл(обработка сообщений от клавиатуры - через GetKeyState(или WM_KEYDOWN) и прорисовка кадра) который выполняется 25 раз в секунду.
Так вот, мне необходимо чтоб при нажатии клавиши создавался объект, однако так как все происходит в цикле то обекты создаются со
скоростью 25штук/сек(если клавиша зажата), а мне необходимо чтоб при зажатой клавиши создавался один объект, независимо от того сколько клавиша была зажата.

Единственное что пришло в голову поставить флаг.
Вот так:
Код:
повторяющийся цикл
{
....
                        if(KEYDOWN(0x57))
			{
				if(keyst == FALSE)
				{
					Создание объекта
					keyst = TRUE;
				}
			}
			if(KEYUP(0x57))
				keyst = FALSE;

...
}
Может есть более удачный способ?
 
Останнє редагування:
врядли на винапи будет лучшее решение. если бы пользовались Фреймворком или инструментами какими, то там бы был какой-нить input controller. Но ничего не мешает вам написать свой, красиво назвать метод и перенести туда реализацию реакции на действия пользователя. И будет у вас уже красиво в одну или несколько строк разруливаться управление
 
Хоть убейте не пойму, нафига изобретать свой лисапед если есть десятки бесплатных 2D движков?
 
Правильно все человек делает. Чтобы раз и навсегда понять что хороший инструментарий продуктивнее чем усидчивость и "мега задрот в программировании", нужно знать что такое "изобретать велосипед" и в результате ничего серьезного не добиться. :)
 
Я через это прошёл лет так 11-12 назад, только я писал под чистый Direct3D... Потом помню пошла библиотека определения пересечения объектов в пространстве, потом подобие своей физики, потом библиотека физики, потом графический движок, физический, их совмещение... Короче было весело ))) То что сейчас делается 5 минут - раньше занимало месяц
 
Дело в том что бывает иногда оно выводит и нормально при 180 градусах)))
сомневаюсь. скорее всего градусы задаются плавающей точкой, а раз так то надо значение смотреть полностью типа, 180,000001 это уже не 180. Но у тебя оно в радианах 0,57..... или как то так и ты на циферки после запятой не смотришь а надо. имхо.
 
Хоть убейте не пойму, нафига изобретать свой лисапед если есть десятки бесплатных 2D движков?

Это мое первое можно сказать графическое приложение, возможно, будет моя первая полноценная игра образца так 92 года:D:D:D
Интересно все сделать самому и с нуля.
Я конечно понимаю если этим заниматься профессионально, то гораздо полезнее знать различные технологии, библиотеки, уметь этим всем пользоваться и не тратить время на ерунду. И думаю в ближайшее время заняться изучением всего этого))), но пока это чисто ради интереса:yahoo:
 
Тогда лучше с 3D начинать... Гораздо интереснее )))
 
Тогда лучше с 3D начинать... Гораздо интереснее )))
и сложней.)
Если "это" закончу нормально, удастся довести до ума и хватит на всё это терпения, обязательно перейду к изучению библиотек для работы с 3д!)
 
А что там сложного? Мне и в голову не приходило начинать игрописательство с 2D )))) Хотя, я пишу только игры определённого жанра, там с 2D делать нечего...
 
сам движек за исключением нюансов практически не отличается. Но по сложности контента отличия есть серьезные. Рисовать плоские мультики для анимации и скелетную анимацию 3д моделей это совершенно разный уровень. А так в основном 3Д и 2Д отличается геймплей. Но 3Д тебя не обязывает сразу делать думоподобные стрелялки, можно камеру сверху прицепить и будет плоский геймплей. А вот с 2Д движком уже возможности урезаются.
 
Это движок. А если с нуля - то отличия более чем внушительные...
 
Назад
Зверху Знизу