Показать сообщение отдельно
Старый 01.11.2012, 17:44   #7
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: Полёт стрелы в 2d (сетке)

в принципе ,то как я реализовал меня устраивает , просто думал может кто по другому сделал (краше что ли).
в основном цель для стрелы одна и по пути не в кого попадать не будет.
разве что при массовом обстреле сетки ячеек 3х3 ,для каждой ячейки будет своя стрела .
можете посмотреть код для одной цели в [оффтопе]
Graphics 1024, 768
SetBuffer BackBuffer()
degree2# = 0
degree# = -45
speed# = 8
x#=200
y#=400
x0#=200
y0#=400
x1# = 600 : y1# = 600 

ClsColor 111,111,111
While Not KeyHit(1)
     Cls
	mx#=MouseX():my#=MouseY()     

	dx#=(x1#)-(x#-ax#)
	dy#=(y1#+ay#)-(y#-ay#)   ;(my+ay)-(y#-ay)
	
	d# = Sqr(dx#*dx# +dy#*dy#)	
	degree#=ATan2(dy,dx) 

	vx# =Sin(degree#)
	vy# =Cos(degree#)

If d>5	Then
		ay# = -(d#/5) 
		ax# = -(d#/5) 
	
	y# = y# + vx#*speed ; The Sin movement
	x# = x# + vy#*speed ; The Cos movement
	
	Color 2,2,2
	Line x ,y,x-15*Sin(degree+90),y+15*Cos(degree+90)



	Color 150,150,255
	Oval x-2,y-2,4,4,1
	Color 2,2,2
Else 	
		Color 2,2,2
	;	Line x0 ,y0,x0+15,y0-15
	degree# = -45
		Line x0 ,y0,x0+15*Sin(degree+90),y0-15*Cos(degree+90)
EndIf 
	
	Line x0+ 3 ,y0-12 + 0 , x0+ 5,y0-12+ 3
	Line x0+ 5 ,y0-12+ 3 , x0+ 5.5,y0-12+ 6
	Line x0+ 5.5 ,y0-12+ 6 ,x0+ 5.5,y0-12+ 9
	Line x0+ 5.5, y0-12+ 9 ,x0+ 5,y0-12+ 12
	Line x0+ 5 ,y0-12+ 12 , x0+ 3,y0-12+ 15

	
If KeyHit(57) Then 
x#=x0#+5
y#=y0#-3
EndIf 
If MouseDown(1) Then 
 x1# = mx# 
 y1# = my#
x#=x0#+5
y#=y0#-3
EndIf
	Color 200,0,200
	Rect x0-5,y0-10, 5,20
	Color 20,120,20
	Oval x0-2,y0-2,4,4,1
	Oval x1-3,y1-3,6,6,1

	

	Text 10,10,degree
	Text 10,20,"dy "+d
Flip
Wend
End

мышью кликайте по экрану для получения новой цели
(Offline)
 
Ответить с цитированием