Помогите примером плиз
Участников: 2
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Помогите примером плиз
Помогите пожалуйста примером создания объекта.
Не могу понять как создавать и удалять объекты в главном цикле программы. Мне нужно по нажатию кнопки чтоб создавалась пуля (рисовался пиксел в координатах игрока) а при покидании экрана удалялась, может кто даст маленький примерчик?
Не могу понять как создавать и удалять объекты в главном цикле программы. Мне нужно по нажатию кнопки чтоб создавалась пуля (рисовался пиксел в координатах игрока) а при покидании экрана удалялась, может кто даст маленький примерчик?
Vicmad- Сообщения : 14
Дата регистрации : 2010-01-08
Re: Помогите примером плиз
Тема не конкретезирована. Ну что за "помогите с примером"?
Объект... Предполагаю, что под "объектом" понимаеться опять же нечто другое.
Ладно, как я уже рассказывал, объект создаёться оператором new.
А разрушаеться оператором delete.
В твоём случае, как я понимаю их много. Значит имеет смысл использовать массив или даже список. Список сделать чуток сложнее, но, он выиграет по скорости обработки.
выстрел добавляем где угодно и когда угодно
новый объект записываем в свободную ячейку
Дальше, где-нибудь в главном цикле для каждой пули вызываеться метод polet
Ну а сам метод, который считает полёт формулы не привожу, сам набьёшь
Опять же, повторю, что для такой тщательной динамики, лучше брать список. Можно подвешивать больше объектов. А в моём примере, одновременно может быть не более тысячи пуль. И приходиться делать цикл поиска свободной ячейки, а ещё цикл поиска объекта пули, что выходит немного не экономно к ресурсам. В прочем тысяча, это не много и не так страшно.
Объект... Предполагаю, что под "объектом" понимаеться опять же нечто другое.
Ладно, как я уже рассказывал, объект создаёться оператором 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
Опять же, повторю, что для такой тщательной динамики, лучше брать список. Можно подвешивать больше объектов. А в моём примере, одновременно может быть не более тысячи пуль. И приходиться делать цикл поиска свободной ячейки, а ещё цикл поиска объекта пули, что выходит немного не экономно к ресурсам. В прочем тысяча, это не много и не так страшно.
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|