ПроЭктировщик
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений (для 9 пользователей)
|
Непостоянная ошибка
Я не знаю, куда конкретно закралась ошибка, поэтому пишу оба кода. Blitz-евский код с подключённой библиотекой работает непостоянно: иногда запускается, иногда выдаёт MAV. Знает кто, что это за фигня?
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
cam = CreateCamera()
PositionEntity cam,0,0,-10
plane = CreatePlane()
EntityColor plane,0,100,100
PositionEntity plane,0,-1,0
sphere1 = CreateSphere()
EntityColor sphere1,150,0,0
sphere2 = CreateSphere()
EntityColor sphere2,0,0,150
sphere3 = CreateSphere()
EntityColor sphere3,0,150,0
r1 = dpCreateArea(1,1)
r2 = dpCreateArea(1,1)
r3 = dpCreateArea(1,1)
While Not KeyHit(1)
dpAttachEntity(sphere1,r1)
dpAttachEntity(sphere2,r2)
dpAttachEntity(sphere3,r3)
dpPropelArea(r1,1,0,1)
dpPropelArea(r2,-1,0,1)
dpPropelArea(r3,0,0,1)
dpUpdateAreas()
UpdateWorld()
RenderWorld()
Flip
Wend
End
Structure Object
num.i
type.i
mass.f
xPos.f
yPos.f
zPos.f
xSc.f
ySc.f
zSc.f
xRot.f
yRot.f
zRot.f
xSp.f
ySp.f
zSp.f
EndStructure
Global NewMap Objects.Object()
Global num.i = 0
;==========Procedures==========;
ProcedureDLL.f dpCreateArea(type.i,mass.f)
AddMapElement(Objects(),Str(num))
Objects()\num = num
Objects()\type = type
Objects()\mass = mass
Objects()\xPos = 0
Objects()\yPos = 0
Objects()\zPos = 0
Objects()\xSc = 1
Objects()\ySc = 1
Objects()\zSc = 1
Objects()\xRot = 0
Objects()\yRot = 0
Objects()\zRot = 0
Objects()\xSp = 0
Objects()\ySp = 0
Objects()\zSp = 0
Protected *area = AllocateMemory(56)
PokeI(*area,Objects()\num)
PokeI(*area + 4,Objects()\type)
PokeF(*area + 8,Objects()\mass)
PokeF(*area + 12,Objects()\xPos)
PokeF(*area + 16,Objects()\yPos)
PokeF(*area + 20,Objects()\zPos)
PokeF(*area + 24,Objects()\xSc)
PokeF(*area + 28,Objects()\ySc)
PokeF(*area + 32,Objects()\zSc)
PokeF(*area + 36,Objects()\xRot)
PokeF(*area + 40,Objects()\yRot)
PokeF(*area + 44,Objects()\zRot)
PokeF(*area + 48,Objects()\xSp)
PokeF(*area + 52,Objects()\ySp)
PokeF(*area + 56,Objects()\zSp)
num = num + 1
ProcedureReturn *area
EndProcedure
ProcedureDLL.f dpAttachEntity(*entity,*area)
FindMapElement(Objects(),Str(PeekI(*area)))
PokeF(*area + 12,Objects()\xPos)
PokeF(*area + 16,Objects()\yPos)
PokeF(*area + 20,Objects()\zPos)
PokeI(*entity + 44,-1)
PokeF(*entity + 64,PeekF(*area + 12))
PokeF(*entity + 68,PeekF(*area + 16))
PokeF(*entity + 72,PeekF(*area + 20))
EndProcedure
ProcedureDLL.f dpUpdateAreas()
ForEach Objects()
Objects()\xPos = Objects()\xPos + Objects()\xSp
Objects()\yPos = Objects()\yPos + Objects()\ySp
Objects()\zPos = Objects()\zPos + Objects()\zSp
Next
EndProcedure
ProcedureDLL.f dpMoveArea(*area,x.f,y.f,z.f)
FindMapElement(Objects(),Str(PeekI(*area)))
Objects()\xPos = Objects()\xPos + x
Objects()\yPos = Objects()\yPos + y
Objects()\zPos = Objects()\zPos + z
EndProcedure
ProcedureDLL.f dpPropelArea(*area,fx.f,fy.f,fz.f)
FindMapElement(Objects(),Str(PeekI(*area)))
Protected m.f = Objects()\mass * 1000
Objects()\xSp = Objects()\xSp + fx / m
Objects()\ySp = Objects()\ySp + fy / m
Objects()\zSp = Objects()\zSp + fz / m
EndProcedure
__________________
|