|
28.12.2009, 22:11
|
#1
|
Знающий
Регистрация: 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
|
Бывалый
Регистрация: 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
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: Score
когда происходит столкновение
та же ошибка :
s\hp = 0 - object does not exist
__________________
StimuL
Maks
|
(Offline)
|
|
29.12.2009, 00:11
|
#4
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Score
У тебя s при удалении - фиксированная ссылка, не факт, что на тот объект, который столкнулся.
Надо перебрать все объекты score
Сравнить s\obj с коллизнувшимся
Если совпадают - удалить сначала s\obj, потом s
Разве не очевидно?
Есть кстати способ уйти от полного перебора, но пока с этим разберись.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
|
|
29.12.2009, 00:22
|
#5
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: Score
перебрал
теперь оно удаляет все кубики.
как Сравнить s\obj с коллизнувшимся ?
чтобы удалило именно тот который столкнулся
__________________
StimuL
Maks
|
(Offline)
|
|
29.12.2009, 00:30
|
#6
|
Бывалый
Регистрация: 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
|
Кодер "win" ЭВМ
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
29.12.2009, 01:05
|
#8
|
Кодер "win" ЭВМ
Регистрация: 10.11.2009
Адрес: ЖуковSKY
Сообщений: 194
Написано 77 полезных сообщений (для 155 пользователей)
|
Ответ: Score
а все догнал, херить сразу полученный хендл (командой EntityCollided) собственно =) чет ступил
__________________
Жизнь игра, задумка дурацкая но графика ...
|
(Offline)
|
|
29.12.2009, 01:16
|
#9
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Score
перебрал
теперь оно удаляет все кубики.
|
Сначала сравнить
Потом удалять (при условии что сравнение совпало, естественно)
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
29.12.2009, 01:33
|
#10
|
Знающий
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений (для 95 пользователей)
|
Ответ: Score
всё, работает правильно. всем пасиба
__________________
StimuL
Maks
|
(Offline)
|
|
30.12.2009, 09:30
|
#11
|
Нуждающийся
Регистрация: 11.12.2009
Сообщений: 77
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: Score
посмотрел выше код ,зачем вот это выражение For i=1 To 20 ?
|
(Offline)
|
|
30.12.2009, 09:32
|
#12
|
[object Object]
Регистрация: 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 за это полезное сообщение:
|
|
30.12.2009, 11:04
|
#13
|
Нуждающийся
Регистрация: 11.12.2009
Сообщений: 77
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: Score
я пoнимаю что двадцать кубиков мы создаём .И что i=1 To 20 . Но i нигде потом не встречается в программе , i даже кагбудто к кубикам не принадлежит.
|
(Offline)
|
|
30.12.2009, 12:25
|
#14
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Score
а ты напиши без i и посмотри что будет.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
30.12.2009, 13:44
|
#15
|
Мастер
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений (для 2,207 пользователей)
|
Ответ: Score
Shyrikk, RTFM и не задавай глупых вопросов
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:14.
|