Суббота, 20.04.2024, 15:58
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории каталога
BlitzMax [14]
Blitz3D [9]
BlitzPlus [0]
Xna [1]
DarkBasic [0]
Общее [3]
Наш опрос
Слушаете ли вы музыку?
1. Да
2. Иногда
3. Нет
Всего ответов: 25
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Статьи
Главная » Статьи » BlitzMax

Колебания бонусов
Начнём издалека:
Новичка от профессионала отличает внимание к деталям, к каждой мелочи.
Приблизим:
В данном случае мелочью будет выступать колебание бонусов. Например: игра, сделанная профессионалом, будет содержать монетки, которые будут колебаться вверх/вниз. Лишняя трата ресурсов? Вовсе нет. Так красивее, а потому такой бонус более способствует погружению игрока в виртуальный мир, нежели статичный.

Как же сделать эти самые колебания? Гораздо проще, чем вы думаете.

Для начала поместим в глобал список монет и загрузим изображение монетки:

Code

Global coin:Timage=LoadImage("coin.png")
Global Clist:TList=New TList


Затем создадим тип:

Code

' Тип монеток. Поля: х,у, фаза колебания.
Type coins
Field x:Int
Field y:Int
Field phase:Int
' Метод отрисовки монет
Method drawer()
phase:+1
If phase=360 Then phase=0
DrawImage(coin,x-plX,y+16*Sin(phase))
End Method
' Метод проверки монет на коллизии с игроком
Method collide(px:Int,py:Int)
If Abs(x-px)<16 And Abs(y+16*Sin(phase)-py)<16 Then
' те действия, которые должны происходить при взятии монетки
EndIf
End Method
End Type


Тут уже надо пояснить:
Метод drawer() отрисовывает каждую монетку в позиции Х,У+некоторое смещение, которое зависит от фазы колебания.
Метод коллизии же проверяет коллизии с boundary Box

Однако это всё то, что пишется до главного цикла.

Небольшое отступление:
Так мы создадим некоторое количество монеток.
Code

Local k:Int
For k=1 To (Rand(30)+30)
coin_create(Rand(1000),Rand(700))
Next


Как же нам использовать эти методы? Да очень просто! Через функции:

Code

Function coin_create(x:Int,y:Int)
Local c:coins
c=New coins
c.x=x ; c.y=y ; c.phase=0
ListAddLast Clist,c
End Function
' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Function coin_update()
Local c:coins
For c=EachIn Clist
c.drawer()
Next
End Function


И, соответственно, в главном цикле нужно прописать вот это:
Code

coin_update()


Ах, да, забыл:
Монетки можно улучшить ещё, если сделать их не через простые картинки, а через анимированные. Как заставить картинки анимироваться синхронно с подъёмом? Подумайте сами, это не так сложно, как кажется.
ПС
Совет: обратите ещё раз своё внимание на поле phase

Источник: http://johnk.3dn.ru/forum/2-112-1
Категория: BlitzMax | Добавил: JohnK (03.08.2007) | Автор: Ize'g0re
Просмотров: 1397
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright JohnK© 2024