forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   извинити, но опять магнит (http://forum.boolean.name/showthread.php?t=12903)

WhiteBlack 12.07.2010 19:22

извинити, но опять магнит
 
и снова здрасьте!
Я уже сегодня задавал вопрос про магнит.... вообщем вот что то нававял, но какая то фигня получилась, да еще и какие то глюки непонятные(шарики должны слипаться, а у меня некоторые на расстоянии друг от друга). Если нетрудно посмотрите, подскажите что не так, или как лучше сделать, плиз
вот код:

SeedRnd MilliSecs()

Graphics3D 1024, 768
SetBuffer BackBuffer()

;типы для столкновения
Const type_magnit=1, type_telo=2, type_pol=3

;массив притягивемых тел
Dim telos(10)

;камера
cam=CreateCamera()
PositionEntity cam, 0, 3, 0
TurnEntity cam, 30, 0, 0

;свет
lit=CreateLight()

;пол
pol=CreatePlane()
poltex=CreateTexture(32, 32)
SetBuffer TextureBuffer(poltex)
Color(0, 15, 255)
Rect(0, 0, 32, 32, 1)
Color(0, 0, 0)
Rect(0, 0, 32, 32, 0)
SetBuffer BackBuffer()
EntityTexture pol, poltex
PositionEntity pol, 0, -5, 0
EntityType pol, type_pol

;магнит
Global magnit=CreateSphere(32)
ScaleEntity magnit, .6, .6, .6
PositionEntity magnit, -1.5, 0, 5
EntityType magnit, type_magnit

;притягиваемые тела
For i=1 To 10
telos(i)=CreateSphere(32)
ScaleEntity telos(i), .5, .5, .5
PositionEntity telos(i), Rnd(-5,5), Rnd(-5,5), Rnd(-5,5)
EntityType telos(i), type_telo
EntityRadius telos(i), .5
Next

;проверка на столкновения
Collisions type_telo, type_magnit, 2, 1
Collisions type_telo, type_pol, 2, 2
Collisions type_telo, type_telo, 2, 2


Repeat

;фокусировка камеры на магните
PointEntity(cam, magnit)

;вращение камеры
If KeyDown(200) MoveEntity cam, 0, 0, .1
If KeyDown(20 MoveEntity cam, 0, 0, -.1
If KeyDown(203) MoveEntity cam, .1, 0, 0
If KeyDown(205) MoveEntity cam, -.1, 0, 0

;функция притяжения
gravity()

UpdateWorld
RenderWorld
Flip

Until KeyHit(1)

End

;------------------------------------gravity power--------------------------
Function gravity()

For i=1 To 10
If EntityDistance(magnit, telos(i))<15 Then
If EntityX(telos(i))>EntityX(magnit) MoveEntity telos(i), -0.4/(EntityDistance(magnit, telos(i))*EntityDistance(magnit, telos(i))), 0, 0
If EntityX(telos(i))<EntityX(magnit) MoveEntity telos(i), 0.4/(EntityDistance(magnit, telos(i))*EntityDistance(magnit, telos(i))), 0, 0
If EntityY(telos(i))>EntityY(magnit) MoveEntity telos(i), 0, -0.4/(EntityDistance(magnit, telos(i))*EntityDistance(magnit, telos(i))), 0
If EntityY(telos(i))<EntityY(magnit) MoveEntity telos(i), 0, 0.4/(EntityDistance(magnit, telos(i))*EntityDistance(magnit, telos(i))), 0
If EntityZ(telos(i))>EntityZ(magnit) MoveEntity telos(i), 0, 0, -0.4/(EntityDistance(magnit, telos(i))*EntityDistance(magnit, telos(i)))
If EntityZ(telos(i))<EntityZ(magnit) MoveEntity telos(i), 0, 0, 0.4/(EntityDistance(magnit, telos(i))*EntityDistance(magnit, telos(i)))
End If
Next

End Function
;----------------------------------end function-------------------------------

den 12.07.2010 22:52

Ответ: извинити, но опять магнит
 
1)
Цитата:

If KeyDown(20 MoveEntity cam, 0, 0, -.1
Код:

If KeyDown(208) MoveEntity cam, 0, 0, -.1
2)Зачем такие сложности с функцией gravity
Код:

;------------------------------------gravity power--------------------------
Function gravity()

For i=1 To 10
If EntityDistance(magnit, telos(i))<15 And EntityDistance(magnit, telos(i))>1 Then
PointEntity(telos(i), magnit)
MoveEntity telos(i),0,0,.01
End If
Next

End Function
;----------------------------------end function-------------------------------

Вот и всё!

pitonms 12.07.2010 23:06

Ответ: извинити, но опять магнит
 
Вот скажи нахрен делать второй топик ??? в тот не написать ???

http://lurkmore.ru/%D0%A2%D1%80%D0%BE%D0%BB%D1%8C - пройди сюда

den 12.07.2010 23:21

Ответ: извинити, но опять магнит
 
Цитата:

Сообщение от pitonms (Сообщение 154474)
Вот скажи нахрен делать второй топик ??? в тот не написать ???

http://lurkmore.ru/%D0%A2%D1%80%D0%BE%D0%BB%D1%8C - пройди сюда

Да ладно, он же новичёк! Я когдато тоже так делал:-D

pitonms 12.07.2010 23:22

Ответ: извинити, но опять магнит
 
Цитата:

Сообщение от Den (Сообщение 154475)
Да ладно, он же новичёк! Я когдато тоже так делал:-D

хреново так жить :mad:

WhiteBlack 13.07.2010 01:17

Ответ: извинити, но опять магнит
 
извиняюсь, если что не так сделал, я действительно новенький
Den спасибо большое, я даже не подумал что так можно использовать PointEntity, так реально намного проще


Часовой пояс GMT +4, время: 08:35.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot