[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]


  • Страница 1 из 1
  • 1
Модератор форума: Spidy, turBO, blitz3d  
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » В чем проблема?
В чем проблема?
NubДата: Четверг, 02.02.2012, 21:04 | Сообщение # 1
ламер
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Вот кусок кода.Подскажите пожалуйста в чём проблема!

Code
For i=1 To 99
   If MeshesIntersect(player,prep(i))=True Then End
  Next
  For i=1 To l
   For p=1 To 99  
    If MeshesIntersect ( vystr(i)\ent,prep(p))
    Free_Vystrel(i)
    FreeEntity prep(p)
    Score=Score+1
    EndIf
   Next   
  Next


Quote
If MeshesIntersect ( vystr(i)\ent,prep(p))


Ругается на эту строчку кода фразой "Object does not exist"


Лучшее - враг хорошего. Сделал ты игру, решил улучшить, а потом до ночи сидишь и думаешь, что же ты такого сделал.
 
ParisHiltonДата: Пятница, 03.02.2012, 14:15 | Сообщение # 2
прогер
Группа: Пользователи
Сообщений: 197
Награды: 2
Репутация: 5
Статус: Offline
"Object does not exist" - ты обращаешься к пустому или не существующему элементу.
Проверь чему равны i и j в момент ошибки и перепроверь существует ли
vystr()\ent и-ый и prep() p-ый


Мы ищем предмет цели для того чтобы найти результаты его следствия
 
MishanayCoolДата: Пятница, 03.02.2012, 14:23 | Сообщение # 3
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Вижу в переменной vystr(i)\ent скобки и знак слеша. Ты уж определись как объявлять её. Как массив или как типовая?

Так объявляются Типы(Type)
Code
Graphics 800,600,0,2
SetBuffer BackBuffer()
SetFont(LoadFont("Arial",16))

Type CHAIR
Field X
Field Y
Field HEIGHT
End Type

; Создаём 100 новых стульев, используя FOR ... NEXT и назвав коллекцию именем ROOM    
For tempx = 1 To 10
For tempy = 1 To 10
room.chair = New Chair
room\x = tempx
room\y = tempy
room\height = Rnd(0,10) ; Выставить случайную высоту от 0 до 10
Next
Next    

; Сместить их все на 1
For room.chair = Each chair
room\x = room\x + 1
Next

; Вывод на экран
room_=1
For room.chair = Each chair
Text 5,room_*16-16,"Стул №="+room_+",  x="+room\x+",  y="+room\y+",  height="+room\height
room_=room_+1
Next
WaitKey()
End


Теперь аналогичный код, но используя массивы
Code
Dim room(100)
Dim room_X(100)
Dim room_Y(100)
Dim room_Height(100)

Graphics 800,600,0,2
SetBuffer BackBuffer()
SetFont(LoadFont("Arial",16))

; Создаём 100 новых стульев
tempx=1
tempy=1
For chair=1 To 100
room(chair)=chair
room_X(chair) = tempx
room_Y(chair) = tempy
room_Height(chair) = Rnd(0,10) ; Выставить случайную высоту от 0 до 10
tempy=tempy+1:If tempy>10 Then tempx=tempx+1:tempy=1
Next

; Сместить их все на 1
For chair = 1 To 100
room_X(chair)=room_X(chair)+1
Next

; Вывод на экран
For chair = 1 To 100
Text 5,chair*16-16,"Стул №="+room(chair)+",  x="+room_X(chair)+",  y="+room_Y(chair)+",  height="+room_Height(chair)
Next
WaitKey()
End


Это два разных подхода, но суть одна, а у вас Nub намешано сразу два варианта. biggrin


MiniDemo3D - Blitz3D

Сообщение отредактировал MishanayCool - Пятница, 03.02.2012, 14:54
 
NubДата: Пятница, 03.02.2012, 15:42 | Сообщение # 4
ламер
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Забыл добавить.Если убрать эту строчку то не вылетает.Но и объект есстественно не убирается sad
Code
FreeEntity prep(p)

Вот код посмотрите пожалуйста!
http://depositfiles.com/files/wzaqvnoqp


Лучшее - враг хорошего. Сделал ты игру, решил улучшить, а потом до ночи сидишь и думаешь, что же ты такого сделал.
 
MishanayCoolДата: Пятница, 03.02.2012, 17:06 | Сообщение # 5
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Посмотрел! Проще заново переписать. Опиши что хотел реализовать. Лучше скрин.

MiniDemo3D - Blitz3D
 
NubДата: Пятница, 03.02.2012, 19:01 | Сообщение # 6
ламер
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Ну, если весь код то корабль летит и обстреливает летящие навстречу корабли.А если конкретно эту функцию то проверяет не соприкоснулся-ли враг с игрок, и не соприкоснулся-ли выстрел с врагом.

Вот ссылка на скрин.


Лучшее - враг хорошего. Сделал ты игру, решил улучшить, а потом до ночи сидишь и думаешь, что же ты такого сделал.
 
MishanayCoolДата: Пятница, 03.02.2012, 19:41 | Сообщение # 7
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Зачем скрин на депозит заливать, вот так трудно?


MiniDemo3D - Blitz3D

Сообщение отредактировал MishanayCool - Пятница, 03.02.2012, 19:43
 
NubДата: Вторник, 07.02.2012, 21:28 | Сообщение # 8
ламер
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Всё спасибо теперь научился smile . А с проблемой что делать?

Добавлено (04.02.2012, 18:23)
---------------------------------------------
Quote
Вижу в переменной vystr(i)\ent скобки и знак слеша. Ты уж определись как объявлять её. Как массив или как типовая?

MishanayCool я сделал массив типа.Такой подход увидел в системе частиц .И вроде сам выстрел работает а в функции его соприкосновения с врагом ошибка sad .

Добавлено (04.02.2012, 18:56)
---------------------------------------------
Эээ я чёто не врубился.Поставил вместо команды FreeEntity команду EntityAlpha entity,0.Всё работает surprised .Сделал функцию убирающую этот корабль из поля зрения-опять работает.В общем проблема как-бы решена biggrin , но скажите: из-за чего FreeEntity не работал?Версия Blitz3d 1.98

Добавлено (07.02.2012, 21:28)
---------------------------------------------
Ладно так как решение нашёл(туповатое правда biggrin ) и не хочется для этого создавать новую тему, подскажите пожалуйста в чём тут ошибка


Вроде должно проверять не появился-ли плэйер на х-координатах или рядом,а если появился увеличивать Score на 1. Заранее благодарю.


Лучшее - враг хорошего. Сделал ты игру, решил улучшить, а потом до ночи сидишь и думаешь, что же ты такого сделал.

Сообщение отредактировал Nub - Суббота, 04.02.2012, 18:58
 
ParisHiltonДата: Среда, 08.02.2012, 14:51 | Сообщение # 9
прогер
Группа: Пользователи
Сообщений: 197
Награды: 2
Репутация: 5
Статус: Offline
Я так понял, ты с помощью функции AI() пытаешься определить расстояние\дистанцию до игрока от заданной точки. В таком случае лучше пользуйся математической функцией:

Code

  If Sqr((EntityX#(prep(i))-EntityX#(Player))^2+((EntityY#(prep(i))-EntityY#(Player))^2+(EntityZ#(prep(i))-EntityZ#(Player))^2)<distance Then


Мы ищем предмет цели для того чтобы найти результаты его следствия
 
NubДата: Среда, 08.02.2012, 15:16 | Сообщение # 10
ламер
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Неа не расстояние. Хочу определить находится ли ИГРОК на пути ВРАГА(или где-то в этих пределах.Для этого и нужна переменная k. Она постепенно увеличивается и проверяет каждый см на наличие игрока biggrin ). Если да то увеличить переменную Score на 1.


Лучшее - враг хорошего. Сделал ты игру, решил улучшить, а потом до ночи сидишь и думаешь, что же ты такого сделал.
 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » В чем проблема?
  • Страница 1 из 1
  • 1
Поиск: