Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 28.12.2009, 22:11   #1
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
Score

Вот создаються двадцать кубиков:

Global bonus = CreateCube()
EntityType bonus,Typebonus
HideEntity bonus


For x=1 To 20
s.score = New score
s\obj = CopyEntity (bonus)
PositionEntity bonus,Rand(-20,20),0,Rand(-20,20)
Next

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

If EntityCollided (player,Typebonus) Then
bonuses = bonuses +1
FreeEntity s\obj
End If

оно чот выдает что нету такого обьекта,
как зделать чтобы удалялся тот кубик с которым сталкуеться игрок?
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 28.12.2009, 22:21   #2
Android
Бывалый
 
Регистрация: 29.03.2007
Сообщений: 662
Написано 199 полезных сообщений
(для 448 пользователей)
Ответ: Score

Если не ошибаюсь, надо делать так.

Добавь в тип еще поле hp(ну или что-то свое)

s\hp=1

If EntityCollided (player,Typebonus) Then
bonuses = bonuses +1
s\hp=0
End If

If s\hp=0
FreeEntity s\obj
Delete s
End If

Писал по памяти, и в браузере. Но ты все-таки попробуй.
(Offline)
 
Ответить с цитированием
Старый 28.12.2009, 23:49   #3
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
Ответ: Score

когда происходит столкновение

та же ошибка :

s\hp = 0 - object does not exist
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 29.12.2009, 00:11   #4
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Score

У тебя s при удалении - фиксированная ссылка, не факт, что на тот объект, который столкнулся.
Надо перебрать все объекты score
Сравнить s\obj с коллизнувшимся
Если совпадают - удалить сначала s\obj, потом s
Разве не очевидно?
Есть кстати способ уйти от полного перебора, но пока с этим разберись.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
BlackOut (29.12.2009), KingMaks (29.12.2009)
Старый 29.12.2009, 00:22   #5
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
Ответ: Score

перебрал
теперь оно удаляет все кубики.

как Сравнить s\obj с коллизнувшимся ?
чтобы удалило именно тот который столкнулся
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 29.12.2009, 00:30   #6
Android
Бывалый
 
Регистрация: 29.03.2007
Сообщений: 662
Написано 199 полезных сообщений
(для 448 пользователей)
Ответ: Score

А, ну да, затупил
Встречаем еще порцию говнокода

s\hp=1

For s.название_типа = Each название_типа

If EntityCollided (player,Typebonus) Then
bonuses = bonuses +1
s\hp=0
End If

If s\hp=0
FreeEntity s\obj
Delete s
End If

Next


Вроде должно работать.
(Offline)
 
Ответить с цитированием
Старый 29.12.2009, 01:03   #7
BlackOut
Кодер "win" ЭВМ
 
Аватар для BlackOut
 
Регистрация: 10.11.2009
Адрес: ЖуковSKY
Сообщений: 194
Написано 77 полезных сообщений
(для 155 пользователей)
Ответ: Score

Graphics3D 800,600,0,2
SetBuffer BackBuffer() : SeedRnd (MilliSecs())

;типы колизий
Const TypeMegaBonus = 1
Const TypePoint = 2

;обьявляю тип для кубиков
Type TMegaCube
Field cub
End Type 

Global point = CreateCube()
EntityType point,TypePoint

Global cam = CreateCamera(point)
PositionEntity cam, 0, 10, -15

;создаем 20 мега кубиков
pos=0
For i=1 To 20
	pos=pos+15
	
	c.TMegaCube = New TMegaCube
	c\cub = CreateCube()
	EntityType c\cub,TypeMegaBonus
	
	EntityColor c\cub,Rand(0,255), Rand(0,255), Rand(0,255) 
	PositionEntity c\cub,Rand(-20,20),0,pos
Next

Collisions TypePoint,TypeMegaBonus,2,3
;ОСНОВНОЙ ЦИКЛ
While Not KeyDown(1)

PointEntity cam,point
UpdateMove ()

coll = EntityCollided (point,TypeMegaBonus)
If coll Then ;с чем то столкнулись...перебираем список на совпадение "хендлов", и херим нужный
	For c.TMegaCube = Each TMegaCube
		If coll=c\cub Then
		   FreeEntity c\cub : Delete c
		   Exit ;уже нашли нужный останавливаем перебор зачем нам перебирать другие?
		EndIf
	Next
EndIf

UpdateWorld ()
RenderWorld ()
Flip
Delay 25
Wend 

End

;ФУНКЦИИ
Function UpdateMove ()
	If KeyDown(200) Then MoveEntity point,0,0,1
	If KeyDown(208) Then MoveEntity point,0,0,-1
	If KeyDown(203) Then TurnEntity point,0,1.5,0
	If KeyDown(205) Then TurnEntity point,0,-1.5,0
End Function
держи...примерно так. можно еще вогнать кубики в массив, смотри как тебе удобней.

Есть кстати способ уйти от полного перебора, но пока с этим разберись.
а ну ка раскажи, чет недогоняю...
__________________
Жизнь игра, задумка дурацкая но графика ...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
KingMaks (29.12.2009)
Старый 29.12.2009, 01:05   #8
BlackOut
Кодер "win" ЭВМ
 
Аватар для BlackOut
 
Регистрация: 10.11.2009
Адрес: ЖуковSKY
Сообщений: 194
Написано 77 полезных сообщений
(для 155 пользователей)
Ответ: Score

а все догнал, херить сразу полученный хендл (командой EntityCollided) собственно =) чет ступил
__________________
Жизнь игра, задумка дурацкая но графика ...
(Offline)
 
Ответить с цитированием
Старый 29.12.2009, 01:16   #9
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Score

перебрал
теперь оно удаляет все кубики.
Сначала сравнить
Потом удалять (при условии что сравнение совпало, естественно)
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 29.12.2009, 01:33   #10
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
Ответ: Score

всё, работает правильно. всем пасиба
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 30.12.2009, 09:30   #11
shyrikkk
Нуждающийся
 
Регистрация: 11.12.2009
Сообщений: 77
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Score

посмотрел выше код ,зачем вот это выражение For i=1 To 20 ?
(Offline)
 
Ответить с цитированием
Старый 30.12.2009, 09:32   #12
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: Score

Сообщение от shyrikkk Посмотреть сообщение
посмотрел выше код ,зачем вот это выражение For i=1 To 20 ?
В цикле создаются 20 кубиков, ваш покорный слуга КО.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
baton4ik (25.01.2010), BlackOut (30.12.2009)
Старый 30.12.2009, 11:04   #13
shyrikkk
Нуждающийся
 
Регистрация: 11.12.2009
Сообщений: 77
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Score

я пoнимаю что двадцать кубиков мы создаём .И что i=1 To 20 . Но i нигде потом не встречается в программе , i даже кагбудто к кубикам не принадлежит.
(Offline)
 
Ответить с цитированием
Старый 30.12.2009, 12:25   #14
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Score

а ты напиши без i и посмотри что будет.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
BlackOut (30.12.2009)
Старый 30.12.2009, 13:44   #15
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Score

Shyrikk, RTFM и не задавай глупых вопросов
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 01:14.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com