Страница: 1 |
Страница: 1 |
Вопрос: Графика
Добавлено: 25.05.05 08:40
Автор вопроса: Локо-мэн
Здрасте. У меня вопрос: Вообщем нужно что бы в PictureBox'e находились много мелких частиц, и чтобы эти частицы хаотично двигались. При соударении друг оj друга и об стенки PictureBox'a изменяли своё направление движениz. :-)
Может кто уже работал над этим...
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #1
Добавлено: 25.05.05 10:04
Легко:
X as Double
Y as Double
FX as Double
FY as Double
End Type
Dim Part(1 to 250) as tpPart
Private Sub Timer1_Timer
Dim i as long,j as long
Picture1.Cls
for i=1 to 250
if Part(i).fx=0 then Part.fx=rnd*2-1
if Part(i).fy=0 then Part.fy=rnd*2-1
Part(i).x=Part(i).x+Part(i).fx
Part(i).y=Part(i).y+Part(i).fy
if Part(i).x>Picture1.ScaleWidth then Part(i).fx = -Part(i).fx
if Part(i).x>Picture1.ScaleWidth then Part(i).fx = -Part(i).fx
Picture1.Pset Part(i).X, Part(i).Y
next
End sub
Я с этим делом все время занимаюсь...
При соударении никак не выйдет, т.к. лагать будет при кол-ве точек > 350
Точку лучше ставить SetPixel'ом, но при таймере(не забудь, Interval=1) это пофигу...
Номер ответа: 2
Автор ответа:
ViktorZ
ICQ: 271202919
Вопросов: 56
Ответов: 837
Профиль | | #2
Добавлено: 25.05.05 16:10
Это как в реальной жизни?
Номер ответа: 3
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #3
Добавлено: 25.05.05 16:56
Самая лучшая графика - это через байтовый массив. Тут можно и размытие применять каждый кадр, все, что угодно. Я делал прогу, которая отображает массив взаимно притягивающихся частиц, по законам гравитации. Скриншоты выложил на http://lezsite.narod.ru/gravprt.htm
Номер ответа: 4
Автор ответа:
Локо-мэн
Вопросов: 4
Ответов: 6
Профиль | | #4
Добавлено: 26.05.05 02:22
Thanks
Номер ответа: 5
Автор ответа:
Локо-мэн
Вопросов: 4
Ответов: 6
Профиль | | #5
Добавлено: 27.05.05 00:13
Сказал спасибо, а рано сказал, выше указанный програмный код не работает. Исправте плиз, а то у меня мозгов не хватит
Номер ответа: 6
Автор ответа:
Genetik
ICQ: 3212009
Вопросов: 5
Ответов: 33
Профиль | | #6
Добавлено: 27.05.05 10:04
Private Type tpPart
X As Double
Y As Double
FX As Double
FY As Double
End Type
Dim Part(1 To 250) As tpPart
Private Sub Timer1_Timer()
Dim i As Long, j As Long
Picture1.Cls
For i = 1 To 250
If Part(i).FX = 0 Then Part(i).FX = Rnd * 2 - 1
If Part(i).FY = 0 Then Part(i).FY = Rnd * 2 - 1
Part(i).X = Part(i).X + Part(i).FX
Part(i).Y = Part(i).Y + Part(i).FY
If Part(i).X > Picture1.ScaleWidth Then Part(i).FX = -Part(i).FX
If Part(i).X > Picture1.ScaleWidth Then Part(i).FX = -Part(i).FX
Picture1.PSet (Part(i).X, Part(i).Y)
Next
End Sub
Теперь работает
Номер ответа: 7
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #7
Добавлено: 27.05.05 11:48
If Part(i).X > Picture1.ScaleWidth Then Part(i).FX = -Part(i).FX
If Part(i).X > Picture1.ScaleWidth Then Part(i).FX = -Part(i).FX
Нафига у тебя два раза одно и то же выполняется?
Номер ответа: 8
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #8
Добавлено: 27.05.05 16:55
У Genetik'a гены перепутались, Error in DNK ... так что хорошо что только 2 раза, могло быть и больше... (не в обиду)
По теме:
При ударении об стенки это легко... Есть вектор направления движения, и объект (частица) летит по вектору меняя кординаты X and Y. Когда Y больше высоты пикчбокса, Y меняет знак на противоположный, а всё остальное остаётся не изменным. Для X аналогично, только не высота, а ширина соответственно.
А вот что касается удареню друг об друга, там тоже вроде примерно так же, только нужно ещё смотреть с какого угла ударились, и если объекты (частицы) одной массы со стороны физики, то скорость этих частиц падает в 2 раза, ну а направление (вектор) нужно будет поменять на противоположный. Но честно говоря сам не пробовал, делал только что-то типа бильярда с одним шариком который ударялся об стенку и менял направление движения противоположно стенки.
Номер ответа: 9
Автор ответа:
Genetik
ICQ: 3212009
Вопросов: 5
Ответов: 33
Профиль | | #9
Добавлено: 27.05.05 16:58
Ето не у меня, ето в оригинале. А я не обратил внимание. Работает и всё, чё еще нужно.
Номер ответа: 10
Автор ответа:
Genetik
ICQ: 3212009
Вопросов: 5
Ответов: 33
Профиль | | #10
Добавлено: 27.05.05 17:00
HACKER, насчет вектора, научи как сделать что бы объект по вектору двигался к его концу (вектора). Ответь в теме "движение контрола", ПЛИЗ.
Номер ответа: 11
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #11
Добавлено: 28.05.05 11:58
Просчитывай столкновение по законам взаимодействия тел.