|
11.10.2010, 18:50
|
#1051
|
AnyKey`щик
Регистрация: 26.05.2009
Сообщений: 15
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Значит не робит? Я просто понадеялся на ваш опыт))) не проверял, к квадрату я цеплял колизию по углам, напихал на них пивот и настроил чтоб пивоты постоянно на углах держались... ух намучался с этим быдлокодом, но по другому пока не умею...
|
(Offline)
|
|
12.10.2010, 07:23
|
#1052
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
квад - это не квадрат. Это плоскость состоящая из двух треугольников
Function CreateQuad (tex$,flag%=1)
quad = CreateMesh()
b = LoadBrush (tex,flag)
s = CreateSurface (quad,b)
v0 = AddVertex (s,-4,0,4,0,0)
v1 = AddVertex (s,4,0,4,1,0)
v2 = AddVertex (s,4,0,-4,1,1)
v3 = AddVertex (s,-4,0,-4,0,1)
AddTriangle (s,v0,v1,v2)
AddTriangle (s,v0,v2,v3)
Return quad
End Function
|
(Offline)
|
|
13.10.2010, 15:47
|
#1053
|
AnyKey`щик
Регистрация: 26.05.2009
Сообщений: 15
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Хм.. ясно, слушай я не разобрался с EntityBox указываю параметры куба, а в итоге получаю сферу с радиусом 1 =( вот код создания энтити:
Function new_car(mes$, speed#, startx#, startz#, startangle, rk#, acs#)
Local cx.car
cx = New car
cx\mesh=LoadMesh(mes)
cx\spd=speed
cx\angle=startangle
cx\kofang=rk
cx\acselerate=acs
cx\cspd=0
MoveEntity cx\mesh, startx,0,startz
ScaleEntity cx\mesh, .2,.2,.2
EntityColor cx\mesh, Rnd(1,255),Rnd(1,255),Rnd(1,255)
RotateEntity cx\mesh, 0, startangle, 0
EntityType cx\mesh, CAR_COL
EntityBox cx\mesh, -1,0,2,4,2,3
End Function
|
(Offline)
|
|
14.10.2010, 23:42
|
#1054
|
Нуждающийся
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений (для 50 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
ну координатный метод подойдет =) if EntityX(player) > EntityX(box)+widthbox/2 And ... и так далее где player игрок, box - область, widthbox соответсвенно ширина коробки, потом еще 5 проверок и все.
Это конечно, если бокс не повернут..
|
Именно таким способом воспользовался.Спасибо
Бокс может быть повернут, но тогда игрока к нему нужно "привязывать", на время вычисления
|
(Offline)
|
|
15.10.2010, 05:13
|
#1055
|
Разработчик
Регистрация: 12.10.2008
Адрес: Самара
Сообщений: 437
Написано 55 полезных сообщений (для 92 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
киньте кто нить пример с контурированием обьектов...
__________________
Пекарня: Intel Core i3 - 3240(3.40Ghz), ram 8 gb, video Gigabyte Nvidia GeForce GTX 650 1gb
Лэптоп : Intel Core i3 - 2365(1.40Ghz), ram 4gb, video Int Intel HD3000(512mb)
Мой набор: 3ds Max 9 + Xors3d(Blitz3d) + Photoshop
|
(Offline)
|
|
15.10.2010, 16:25
|
#1056
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений (для 6,853 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Сообщение от Colossus
киньте кто нить пример с контурированием обьектов...
|
Function Cel_Shade(Shaded_Entity, OutlineScale#=0.025, r#=0, g#=0, b#=0) Local Outline_Entity = CopyMesh(Shaded_Entity) UpdateNormals(Outline_Entity) EntityFX(Outline_Entity, 1+8) Local i For i = 1 To CountSurfaces(Outline_Entity) Local surf = GetSurface(Outline_Entity, i) Local j For j = 0 To CountVertices(surf) - 1 Local Vx# = VertexX#(surf, j) Local Vy# = VertexY#(surf, j) Local Vz# = VertexZ#(surf, j) Local VNx# = VertexNX#(surf, j) Local VNy# = VertexNY#(surf, j) Local VNz# = VertexNZ#(surf, j) VertexCoords (surf, j, Vx#+(VNx#*OutlineScale#), Vy#+(VNy#*OutlineScale#), Vz#+(VNz#*OutlineScale#)) Next Next FlipMesh Outline_Entity EntityColor Outline_Entity, r, g, b PositionEntity Outline_Entity, EntityX#(Shaded_Entity, True), EntityY#(Shaded_Entity, True), EntityZ#(Shaded_Entity, True) EntityParent Outline_Entity, Shaded_Entity End Function
__________________
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 за это полезное сообщение:
|
|
16.10.2010, 15:58
|
#1057
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Randomize, еще желательно добавить.
RotateEntity Outline_Entity,EntityPitch (Shaded_Entity, True),EntityYaw (Shaded_Entity, True),EntityRoll (Shaded_Entity, True)
|
(Offline)
|
|
23.10.2010, 06:39
|
#1058
|
AnyKey`щик
Регистрация: 26.05.2009
Сообщений: 15
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Народ, у меня проблема с рандомом, короче вот код:
в офтопе, по тому что большой..
Graphics3D 800,600,16, 1
SetBuffer BackBuffer()
MoveMouse GraphicsWidth()/2, GraphicsHeight()/2
camera=CreateCamera()
CameraViewport camera,0,0,800,600
MoveEntity camera, 0, 10,-10
TurnEntity camera, 50,0,0
light=CreateLight()
RotateEntity light, 23,127,98
plane=CreatePlane()
cur=LoadImage("cursor.png")
Global unid#=1
Type unit
Field tip$, team, dmg, range, mesh, state, oldx#, oldz#, speed#, rel#, rx#, rz#, sel, id
End Type
; type of insect, team of ins., damage of ins., model of ins., state(0=stay, 1=run, 2=attack, 3=death),
; last position of ins(x,z), reload speed, real position of ins(x,z), select of unit 0/1
Type mur
Field team, tip, mesh, dmg, rel#, range, sel, id
End Type
Function make_mur(x#, z#, ty, te, id)
m.mur = New mur
m\team=te
m\id=id
If (ty=1) Then
m\mesh=LoadMesh("mur_01.3ds")
PositionEntity m\mesh, x,0,z
m\dmg=10
m\range=7
m\rel=0.5
EndIf
If (te=1) Then
EntityColor m\mesh, 255,0,0
EndIf
End Function
Function make_unit(x#, z#, te, ty, tx#, tz#, id)
unid=unid+1
un.unit = New unit
un\tip=ty
un\id=id
un\team=te
un\mesh=CreateCube()
PositionEntity un\mesh, x, 0, z
un\oldx=x
un\oldz=z
un\rx=tx
un\rz=tz
If(ty=1) Then
ScaleEntity un\mesh, 1,0.5,0.25
un\dmg=2
un\range=3
un\speed=0.2
un\rel=0.5
EndIf
If(te=1) Then
EntityColor un\mesh, 255,0,0
EndIf
If x<>tx Or z<>tz Then
un\state=1
Else
un\state=0
EndIf
End Function
Function move_unit()
For un.unit = Each unit
pivot=CreatePivot()
MoveEntity pivot, un\rx,0,un\rz
If (EntityDistance(un\mesh, pivot)>1) Then
If (un\rx-un\oldx)<0 Then
ang=180
Else
ang=0
EndIf
sn#=un\rz-un\oldz
cn#=un\rx-un\oldx
RotateEntity un\mesh, EntityPitch(un\mesh),ATan(sn/cn)+ang,EntityRoll(un\mesh)
MoveEntity un\mesh, un\speed, 0,0
un\oldx=EntityX(un\mesh)
un\oldz=EntityZ(un\mesh)
Else
un\oldx=un\rx
un\oldz=un\rz
un\state=0
EndIf
FreeEntity pivot
Next
End Function
Function produse_unit(id, ty)
For m.mur = Each mur
If (m\id=id) Then
make_unit(EntityX(m\mesh),EntityZ(m\mesh), m\team, ty, EntityX(m\mesh)-5, EntityZ(m\mesh), unid)
EndIf
Next
End Function
While Not KeyHit(1)
SeedRnd MilliSecs()
If (MouseX()<5) Then
MoveEntity camera, -0.2,0,0
MoveMouse 4, MouseY()
EndIf
If (MouseX()>GraphicsWidth()-5) Then
MoveEntity camera, 0.2,0,0
MoveMouse GraphicsWidth()-4, MouseY()
EndIf
If (MouseY()<5) Then
PositionEntity camera, EntityX(camera),EntityY(camera),EntityZ(camera)+0.2
MoveMouse MouseX(), 4
EndIf
If (MouseY()>GraphicsHeight()-5) Then
PositionEntity camera, EntityX(camera),EntityY(camera),EntityZ(camera)-0.2
MoveMouse MouseX(), GraphicsHeight()-4
EndIf
If KeyDown(17) Then
PositionEntity camera, EntityX(camera),EntityY(camera),EntityZ(camera)+0.1
EndIf
If KeyDown(30) Then
MoveEntity camera, -0.1,0,0
EndIf
If KeyDown(31) Then
PositionEntity camera, EntityX(camera),EntityY(camera),EntityZ(camera)-0.1
EndIf
If KeyDown(32) Then
MoveEntity camera, 0.1,0,0
EndIf
If KeyHit(18) Then
make_mur(0,0,1,1,1)
EndIf
If KeyHit(16) Then
produse_unit(1,1)
EndIf
move_unit()
For un.unit = Each unit
If(Rnd(1,1000)<=2) And (un\state=0) Then
If un\state=0 Then
un\rx=un\oldx+Rnd(-5,5)
un\rz=un\oldx+Rnd(-5,5)
If (un\rx+un\rz)*(un\rx*un\rz)<>0 Then
un\state=1
EndIf
EndIf
EndIf
Next
For un.unit = Each unit
For un2.unit= Each unit
If EntityDistance(un\mesh, un2\mesh)<1 And un\id<>un2\id And un\state=0 Then
un\rx=un\oldx+Rnd(-2,2)
un\rz=un\oldx+Rnd(-2,2)
un\state=1
EndIf
Next
For m.mur = Each mur
If EntityDistance(un\mesh, m\mesh)<2 And un\state=0 Then
un\rx=un\oldx+Rnd(-5,5)
un\rz=un\oldx+Rnd(-5,5)
un\state=1
EndIf
Next
Next
Cls
UpdateWorld
RenderWorld
DrawImage cur,MouseX(),MouseY()
Flip
Wend
End
В чем вообще суть, пока что есть немного, нужно нажать "У" , создастся новый типа муравейник, нажать "Й" из него выйдет юнит. Если юниты слижком близко друг к другу то передвигаться в в рандомную точку области 4х4 с центром где находится юнит, короче юнит в центре этой области. суть в чем, когда я закликиваю "й" то юниты толкаются, стараются распредилиться равномрно, только вот распределяются они почему-то по линии ну примерно по линии под 45 градусов, линия проходит через 0,0 на координатной плоскости, подскажите в че тут казус? или альтернативный спосо выбора рандомного направления...
Заранее извиняюсь за быдлокод))) т.к. в Блитце сравнительно недавно...
|
(Offline)
|
|
23.10.2010, 14:38
|
#1059
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
un\rx=un\oldX+Rnd(-5,5)
un\rz=un\oldX+Rnd(-5,5)
|
на rz стоит тоже oldX
верно будет так
un\rx=un\oldX+Rnd(-5,5)
un\rz=un\oldZ+Rnd(-5,5)
|
SeedRnd (MilliSecs()) тоже пригодится
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.10.2010, 11:33
|
#1060
|
AnyKey`щик
Регистрация: 26.05.2009
Сообщений: 15
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Спасибо) при копировании видать поменять забыл.. Теперь все работает. Да,SeedRnd (MilliSecs()) ставил, результат один и тотже, оставлю так...
|
(Offline)
|
|
25.10.2010, 20:35
|
#1061
|
Разработчик
Регистрация: 12.10.2008
Адрес: Самара
Сообщений: 437
Написано 55 полезных сообщений (для 92 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Рандомиз, а если перевести код в Ксорс то ругается на строчку
For j = 0 To xCountVertices(surf) - 1
МаВом ругается...
__________________
Пекарня: Intel Core i3 - 3240(3.40Ghz), ram 8 gb, video Gigabyte Nvidia GeForce GTX 650 1gb
Лэптоп : Intel Core i3 - 2365(1.40Ghz), ram 4gb, video Int Intel HD3000(512mb)
Мой набор: 3ds Max 9 + Xors3d(Blitz3d) + Photoshop
|
(Offline)
|
|
25.10.2010, 21:25
|
#1062
|
Мастер
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений (для 3,006 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Сообщение от Colossus
Рандомиз, а если перевести код в Ксорс то ругается на строчку
For j = 0 To xCountVertices(surf) - 1
МаВом ругается...
|
Найт выражает то, что думает о тебе через ксорс!
Ну и правильно, я бы тоже тебя послал вот за это:
For i = 1 To xCountSurfaces(Outline_Entity) ??
Ты передаешь в функцию xCountVertices несуществующий сюрфейс!
В ксорсе все порядковые номера начинаются не с 1цы, как в б3д - а с 0.
|
(Offline)
|
|
25.10.2010, 22:37
|
#1063
|
Разработчик
Регистрация: 12.10.2008
Адрес: Самара
Сообщений: 437
Написано 55 полезных сообщений (для 92 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
спасибо доктор, мне уже полегчало
__________________
Пекарня: Intel Core i3 - 3240(3.40Ghz), ram 8 gb, video Gigabyte Nvidia GeForce GTX 650 1gb
Лэптоп : Intel Core i3 - 2365(1.40Ghz), ram 4gb, video Int Intel HD3000(512mb)
Мой набор: 3ds Max 9 + Xors3d(Blitz3d) + Photoshop
|
(Offline)
|
|
27.10.2010, 23:38
|
#1064
|
Разработчик
Регистрация: 24.02.2010
Адрес: Новороссийск
Сообщений: 485
Написано 112 полезных сообщений (для 329 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
У меня такая проблема: гружу аним меш, ставлю ему EntityOrder -1, ничего не происходит, ставлю его чилдам рекурсивно это значение:
Function EntityOrderCh(ent,ord)
EntityOrder ent,ord
For i = 1 To CountChildren(ent)
tmp_ch = GetChild(ent,i)
EntityOrder tmp_ch,ord
If CountChildren(tmp_ch) Then EntityOrderCh tmp_ch,ord
Next
End Function
Но вот в чем проблема: чилды не пересекаются друг с другом, они тупо перекрывают друг друга. Что делать?
upd
Мда, в справке написано, что у кого order<>0, у того не работает z-буфферизация... мб есть какой-то выход?
upd2
Решил проблему вот как: разделил интити на слои, которые рендерятся по очереди (да, немного теряется производительность, но других вариантов нет)
Type TIOrder
Field ent,layer
Field hided
End Type
Function IOM(entity,layer=0) ;Запоминает интити
IOrder.TIOrder = New TIOrder
IOrder\ent = entity : IOrder\layer = layer
End Function
Function RenderWorldZ()
For IOrder.TIOrder = Each TIOrder
IOrder\hided = BB_EntityHidden(IOrder\ent) ;ACHTUNG! Требуется библиотека blitz3d.dll, выкладывать не буду, ищите на 3dcom.3dn.ru
Next
For i = 0 To 1
For IOrder.TIOrder = Each TIOrder
If IOrder\layer<>i Then HideEntity IOrder\ent
If IOrder\layer=i And IOrder\hided=0 Then ShowEntity IOrder\ent
Next
RenderWorld
Next
For IOrder.TIOrder = Each TIOrder
If IOrder\hided = 1 Then HideEntity IOrder\ent Else ShowEntity IOrder\ent
Next
End Function
__________________
299 792 458
Последний раз редактировалось DeeJex, 28.10.2010 в 00:51.
|
(Offline)
|
|
28.10.2010, 17:57
|
#1065
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Создал для врагов и пулей - типы с фиелдом для мешей
Type EnemyType Field Model End Type
Type ShotsType Field Model End Type
For i=1 To 2
Enemy.EnemyType=New EnemyType
Enemy\Model=CreateCube() Next
Создал врагов и пули (при стрельбе)
Настроил Collisions-ы: SolidEnemy и т.п.
; -код проги-
; **************
For Shot.ShotsType=Each ShotsType If EntityCollided(Shot\Model,SolidEnemy)FreeEntity EntityCollided(Shot\Model,SolidEnemy) ; - удаляет модель врага с которой столкнулась пуля... отсюда вопрос
; так же ошибка выходит при привязке TempCollidedEnt=EntityCollided(Shot\Model,SolidEne my) - пробел ошибка форума
; а это помогло бы, например для: FreeEntity TempCollidedEnt
EndIf Next
Вопрос:
В том месте удаляется модель (Enemy\Model), а как удалить тот Enemy, чья эта модель..
Знаю, что - Delete Enemy
Но как у модели EntityCollided(Shot\Model,SolidEnemy) определить прикрепляемый тип?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:59.
|