Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
Легко:

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.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
Просчитывай столкновение по законам взаимодействия тел.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам