FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Помогите примером плиз

Участников: 2

Перейти вниз

Помогите примером плиз Empty Помогите примером плиз

Сообщение  Vicmad Сб Янв 16, 2010 8:38 am

Помогите пожалуйста примером создания объекта.
Не могу понять как создавать и удалять объекты в главном цикле программы. Мне нужно по нажатию кнопки чтоб создавалась пуля (рисовался пиксел в координатах игрока) а при покидании экрана удалялась, может кто даст маленький примерчик?
Vicmad
Vicmad

Сообщения : 14
Дата регистрации : 2010-01-08

Вернуться к началу Перейти вниз

Помогите примером плиз Empty Re: Помогите примером плиз

Сообщение  Eric-S Пн Янв 18, 2010 5:23 pm

Тема не конкретезирована. Ну что за "помогите с примером"?

Объект... Предполагаю, что под "объектом" понимаеться опять же нечто другое.

Ладно, как я уже рассказывал, объект создаёться оператором new.
А разрушаеться оператором delete.
В твоём случае, как я понимаю их много. Значит имеет смысл использовать массив или даже список. Список сделать чуток сложнее, но, он выиграет по скорости обработки.

Код:


' тип для описания пули
type pule

declare function polet() as integer

' координаты
x as integer
y as integer
z as integer

' ускорение
a as integer

' масса
m as integer

' движение по векторам
vx as integer
vy as integer
vz as integer

end type

' массив указателей на объект
dim shared pules( 1 to 100 ) as pule ptr

выстрел добавляем где угодно и когда угодно
новый объект записываем в свободную ячейку
Код:

sub vistrel()
dim n as integer

' найти пустую ячейку
do while pules(n) <> 0
n += 1
loop

' собственно само создание объекта
pules(n) = new pule()

' необходимо заполнитьь первоначальные данные
' откуда выстрел, куда выстрел
pules(n)->x = 44
pules(n)->y = 567
pules(n)->z = 34
' и прочее

end sub



Дальше, где-нибудь в главном цикле для каждой пули вызываеться метод polet
Код:

for i =1 to 1000
if pules(i) then
' только для существующей пули

if pules(n)->polet() then

' если пуля долеталась, то разрушаем её объект
delete pules(n)

' и обнуляем указатель, чтобы пометить, что ячейка массива пуста
pules(n) = 0

end if
end if
next


Ну а сам метод, который считает полёт формулы не привожу, сам набьёшь
Код:

function pule.polet() as integer

' тут считаем, куда и как она летит
this.x += this.vx
this.y += this.vy
this.z += this.vz

' проверка границ
' если был выход за границы, то функция возвращает 1
if this.x < 0 or this.x > 65536 then return 1
if this.y < 0 or this.y > 65536 then return 1
if this.z < 0 or this.z > 65536 then return 1


' 0 если летит дальше
function = 0
end function

Опять же, повторю, что для такой тщательной динамики, лучше брать список. Можно подвешивать больше объектов. А в моём примере, одновременно может быть не более тысячи пуль. И приходиться делать цикл поиска свободной ячейки, а ещё цикл поиска объекта пули, что выходит немного не экономно к ресурсам. В прочем тысяча, это не много и не так страшно.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения