1 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果您選擇使用笛卡爾坐標(biāo),就像我在評(píng)論中建議的那樣,這就是您的代碼的樣子:
package main
import (
"fmt"
"math"
)
func main() {
position1 := &Position{550, 200}
position2 := &Position{700, 500}
vector1 := CreatePathVector(position1, position2, 70)
fmt.Printf("position1: %v\nposition2: %v\n", position1, position2)
position := position1
for i := 0; i < 5; i++ {
position = position.Add(vector1)
fmt.Printf("next position: %v\n", position)
}
position3 := &Position{400, 500}
position4 := &Position{700, 400}
vector2 := CreatePathVector(position3, position4, 50)
fmt.Printf("position3: %v\nposition4: %v\n", position3, position4)
position = position3
for i := 0; i < 5; i++ {
position = position.Add(vector2)
fmt.Printf("next position: %v\n", position)
}
}
type Position struct {
X float64
Y float64
}
type Vector struct {
dX float64
dY float64
}
func CreatePathVector(pos1 *Position, pos2 *Position, speed int) *Vector {
ydiff := pos2.Y - pos1.Y
xdiff := pos2.X - pos1.X
mag := math.Sqrt(xdiff*xdiff+ydiff*ydiff)
return &Vector{
dX: xdiff/mag*float64(speed),
dY: ydiff/mag*float64(speed),
}
}
func (p *Position) Add(v *Vector) *Position {
return &Position{
X: p.X + v.dX,
Y: p.Y + v.dY,
}
}
如果你想堅(jiān)持的角度,只是切換Cos和Sin中Add。這是因?yàn)槠聊坏姆较虿⒉恢匾喝绻惆裻 = arctan(y/x)你y的背部sin(t)和x從背部cos(t)不管是什么x和y代表。所以添加應(yīng)該是這樣的:
func (p *Position) Add(v *Vector) *Position {
return &Position{
X: p.X + math.Cos(v.Radians)*v.Distance,
Y: p.Y + math.Sin(v.Radians)*v.Distance,
}
}
我之前做過一些小游戲,我也嘗試過使用角度來移動(dòng)。我的建議是不要嘗試。如果您想為游戲添加更逼真的物理效果,向量和線性代數(shù)將是您最好的朋友。在我看來,角度和三角函數(shù)太混亂了。
- 1 回答
- 0 關(guān)注
- 144 瀏覽
添加回答
舉報(bào)