|
3D-программирование Вопросы, касающиеся программирования 3D мира |
22.09.2005, 10:51
|
#1
|
Нуждающийся
Регистрация: 18.09.2005
Сообщений: 58
Написано 0 полезных сообщений (для 0 пользователей)
|
Вот код:
If EntityCollided( car,TWALL)
sp1=LoadSprite("img\1.bmp")
SpriteViewMode sp1,1
Else
EndIf
И так, спрайт подгружаеться и при столкновении со стеной, появляеться в начале трассы, а как сделать, чтобы он появлялся возле машинки, со стороны столкновения и когда столкновение прекращалось, то и спрайт выключался так сказать. По поводу привязки знаю, что скорее всего надо привязывать к машине, но когда пишу вот такую строчку:
sp1=LoadSprite("img\1.bmp")(car)
то выдает ошибку, Expectid ENDIF а зачем он там я не понимаю, а уж темболее в какой части он учзусешв
Кто может помочь?
|
(Offline)
|
|
22.09.2005, 11:32
|
#2
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
1. Каждый раз грузить/удалять спрайт накладно.
Загрузи его при старте уровня и спрячь из виду командой HideEntity sp1
2. Привязку непрвавильно пишешь, вот и получаешь ошибку.
Родительский объект должен быть одним из параметров команды LoadSprite, а у тебя он сам по себе...
Попробуй так сделать EntityParent sp1,car (посмотри в хелпе про эту команду, я мог че-нить перепутать)
Этим ты привяжешь спрайт к машине. Теперь ставишь его в нужное место относительно машины командой PositionEntity sp1,x,y,z
там, где проверка на столкновение, делаешь спрайт видимым
если (машина столкнулась со стенкой)
ShowEntity sp1
иначе
HideEntity sp1
конец_если
|
(Offline)
|
|
22.09.2005, 11:43
|
#3
|
Нуждающийся
Регистрация: 18.09.2005
Сообщений: 58
Написано 0 полезных сообщений (для 0 пользователей)
|
Спасибо, вот только проблема со стороной отображения спрайта осталась - если в правую стенку врезаюсь - все почти как надо(спрайт рядом с машинкой, подскажи как его подвинуть к ней вплотную), а вот если в левую стенку врезаюсь, то спрайт все равно с правой стороны отображаеться.
|
(Offline)
|
|
22.09.2005, 12:13
|
#4
|
Нуждающийся
Регистрация: 18.09.2005
Сообщений: 58
Написано 0 полезных сообщений (для 0 пользователей)
|
Пока Вы думаете над мои вопросом(изложен выше), я задам еще один
Вот код:
If KeyDown(208)
If speed>0 Then
EntityParent sp2,car
ShowEntity sp2
SpriteViewMode sp2,1
PositionEntity sp2,x,y,z
Else
HideEntity sp2
EndIf
If speed<0 Then
EntityParent sp3,car
ShowEntity sp3
SpriteViewMode sp3,1
PositionEntity sp3,x,y,z
Else
HideEntity sp3
EndIf
EndIf
Так вот вопрос, как сделать так чтобы ТОЛЬКО ПРИ нажатии на кнопку(20 спрайты загорались, а то получаеться, что спрайт(sp2) у меня горит как только скорость >0
P.S. Не забудьте о вопросах:
1. со стороной отображения спрайта
2. спрайт рядом с машинкой, подскажи как его подвинуть к ней вплотную
|
(Offline)
|
|
22.09.2005, 12:13
|
#5
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Точно не скажу как сделать(нет блитца под рукой), но есть команда LinePick, которая позволяет получить координаты, так вот делаешь ЛайнПик влево, вправо и вперед. Если команда вернула НЕ НОЛЬ, то она (точнее смежные ей команды) вернет и координаты пересечения воображаемого луча с объектом. Выводи спрайт в этих координатах. Тогда и привязка не нужна к машинке...
|
(Offline)
|
|
22.09.2005, 12:22
|
#6
|
Нуждающийся
Регистрация: 18.09.2005
Сообщений: 58
Написано 0 полезных сообщений (для 0 пользователей)
|
Чесно говоря без примера не могу понять, мне лучше на примере показывать(не обязательно на моем коде), так я лучше понимаю(сам не знаю почему), так что буду ждать других ответов или когда у тебя Блиц окажеться под рукой
|
(Offline)
|
|
22.09.2005, 12:44
|
#7
|
Нуждающийся
Регистрация: 18.09.2005
Сообщений: 58
Написано 0 полезных сообщений (для 0 пользователей)
|
До решения вопроса о нажатии на кнопку(20 я сам додумался (мечтал использовать этот смайл)
На всякий случай если кому-то интересно, вот ответ:
If KeyDown(208)
If speed>0 Then
EntityParent sp2,car
ShowEntity sp2
SpriteViewMode sp2,1
PositionEntity sp2,x,y,z
Else
HideEntity sp2
EndIf
If speed<0 Then
EntityParent sp3,car
ShowEntity sp3
SpriteViewMode sp3,1
PositionEntity sp3,x,y,z
Else
HideEntity sp3
EndIf
[B]Else
HideEntity sp2
HideEntity sp3[/B]
EndIf
Но остаються в силе вопросы:
1. со стороной отображения спрайта
2. спрайт рядом с машинкой, подскажи как его подвинуть к ней вплотную
|
(Offline)
|
|
22.09.2005, 14:43
|
#8
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Я написал пример про спрайт на стенке, смотри, должно помочь.
расширение файла необходимо ПЕРЕИМЕНОВАТЬ в RAR!
EntityParent sp2,car
SpriteViewMode sp2,1
PositionEntity sp2,x,y,z
|
Насколько я понял, эти параметры никогда не меняются, а по сему зови эти функции ТОЛЬКО при создании спрайтов!
|
(Offline)
|
|
22.09.2005, 17:37
|
#9
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Не поможет.
Вот нормальный код, найдите пару десятков отличий. А заодно замерьте во сколько раз повісилась производительность...
Graphics3D 1024,768,32,1
SetBuffer BackBuffer()
;ystanovka kolliziy
Const robotType = 1
Const levelType = 2
Const boxType = 3
Const cameraType = 4
Collisions robotType,levelType,2, 3
Collisions robotType,boxType,2, 2
Collisions cameraType,levelType,2, 3
Collisions cameraType,boxType,2, 2
;shrift pokrupnee
SetFont(LoadFont ("arial cyr",20))
;Sun
l = CreateLight(1)
RotateEntity l, 90, 0,0
;Level
level=CreatePlane ()
EntityColor level,0,0,200
PositionEntity level,0,-10,0
EntityType level,levelType
;Robo
robot = CreateCube ()
EntityColor robot,0,200,0
ScaleEntity robot,5,5,5
EntityRadius robot, 6
EntityType robot,robotType
;Camera
cam = CreateCamera(robot)
EntityRadius cam,5
EntityType cam,cameraType
CameraRange cam,0.01,2000;<<NEVER USE SUCH VALUES OR Z-Buffer WILL DIE! USE SOMETHING LIKE (0.1,1000)-MAXIMUM!
CameraFogColor cam, 0,128,255
CameraFogRange cam, 1,1000
CameraClsColor cam,0,128,255;<<FOG COLOR WITHOUT BACKGROUND COLOR HAS NO REASON IN RESULT...
PositionEntity cam, 0, 5, 10
;bol'shoy kubik
cub1=CreateCube()
ScaleEntity cub1 ,1, 10, 100
PositionEntity cub1,25,5,-30
EntityType cub1,boxType
cub2=CopyEntity (cub1)
PositionEntity cub2,-25,5,-30
EntityType cub2,boxType
;iskry ot mashiny
spr1 = LoadSprite ("spr1.bmp")
SpriteViewMode spr1,2
RotateEntity spr1,0,180,90
ScaleSprite spr1,5,5
EntityFX spr1,17
FPSTimer=CreateTimer(60)
;------------------------------------------
;<<MAIN LOOP
While Not KeyHit(1)
;povorot kamery na robota
PointEntity cam,robot
;dvigaem kamery
If KeyDown(44) Then TranslateEntity cam,0,-0.5,0
If KeyDown(45) Then TranslateEntity cam,0,0.5,0
If KeyDown (46) Then MoveEntity cam,0,0,-1
If KeyDown(47) Then MoveEntity cam,0,0,1
;dvigaem robota
If KeyDown(208) Then MoveEntity robot,0,0,1
If KeyDown (200) Then MoveEntity robot,0,0,-1
If KeyDown (203) Then MoveEntity robot,1,0,0
If KeyDown (205) Then MoveEntity robot,-1,0,0
;gravitaciya
TranslateEntity robot,0,-1,0
;esli zadevaem steny, to risyem iskry
For coll=1 To CountCollisions(Robot)
If GetEntityType(CollisionEntity(Robot,coll))=boxType Then
px# = CollisionX(Robot,coll)
py# = CollisionY(Robot,coll)
pz# = CollisionZ(Robot,coll)
PositionEntity spr1,px#,py#,pz#
nx# = CollisionNX(Robot,coll)
ny# = CollisionNY(Robot,coll)
nz# = CollisionNZ(Robot,coll)
AlignToVector spr1,nx#,ny#,nz#,3
MoveEntity Spr1,0,0,0.1
EntityAlpha spr1,1;<<Hide/ShowEntity cmds is slowly- don't use it in loop
Exit
Else
EntityAlpha spr1,1
EndIf
Next
UpdateWorld
RenderWorld
Flip(0)
WaitTimer(FPSTimer)
Wend
End
P.S. Кстати, что делает эта тема в разделе "2Д-программирование" ?
|
(Offline)
|
|
22.09.2005, 19:14
|
#10
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Столкновения мешей со спрайтами можно посмотреть в FAQ - создаём свой FPS : Выстрелы (или аналогичную статью на blitzetc)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
23.09.2005, 11:01
|
#11
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Diplomat, спасибо за код (я не знал про GetEntityType, за нее и благодарю).
Насчет раздела мне тоже интересно.
|
(Offline)
|
|
23.09.2005, 11:46
|
#12
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Нема за що...
|
(Offline)
|
|
24.09.2005, 22:32
|
#13
|
Нуждающийся
Регистрация: 18.09.2005
Сообщений: 58
Написано 0 полезных сообщений (для 0 пользователей)
|
А может все таки поясните, а то я чего то не понял!
А тему суда поместил, потомучто спрайт - 2-D изображение.
|
(Offline)
|
|
24.09.2005, 22:37
|
#14
|
|
потомучто оно так и есть ето 2д чтука в 3д пространстве, тоесть плоскость в обьеме
|
|
|
26.09.2005, 06:58
|
#15
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
А тему суда поместил, потомучто спрайт - 2-D изображение.
|
Я думал, что все, что делается от лица Graphics3D - это по части 3д программирования независимо от содержания...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:59.
|