예상대로 작동하지 + XNA는운영 행동은 내가 조종 AI에 대해 다음 페이지를 읽고 있어요
내 코드는 다음과 같습니다
Sub AI()
Dim circleRadius As Single = 6.0F
Dim wanderAngle As Single = 0.0F
Dim wanderChange As Single = 1.0F
Dim enemySpeed As Single = 0.3F
Dim enemyPosistion As Vector2 = (1,1)
Dim circleMiddle As Vector2 = enemyPosistion
circleMiddle.Normalize()
circleMiddle = Vector2.Multiply(circleMiddle, circleRadius)
Dim wanderForce As New Vector2
wanderForce = Vector2.Normalize(wanderForce) * 3 ' Set length of vector
wanderForce = AngleToVector(wanderAngle)
Randomize()
wanderAngle += Rnd() * wanderChange - wanderChange * 0.5
Dim force As New Vector2
force = Vector2.Add(circleMiddle, wanderForce)
enemyPosistion += force * enemySpeed
End Sub
Private Function AngleToVector(angle As Single) As Vector2
Return New Vector2(CSng(Math.Sin(angle)), -CSng(Math.Cos(angle)))
End Function
내가, 내가 Vector2.Zero에 enemyPosistion을 설정하여 간단한 실수를 실현하는 대신 내가 (1,1)을로 설정 그것은 적을 오른쪽 위로 움직이게합니다.
https://www.youtube.com/watch?v=UZubNaEA9W0
이 그것이 무엇을해야하는지의 라인을 따라 더 : 나는 비디오를 포함했다
https://www.youtube.com/watch?v=1wfgPCMdW2U
사람이 내가 잘못 뭘하는지 말해 줄래?
구성 요소의 값이 산술에서 기대하는 값인지 확인하기 위해이 코드를 단계별로 실행 해 보았습니까? 길이가 0 인 벡터를 정규화하면 최종 적 위치를 뒤엎을 수있는 NaN이 발생합니다. –
@SteveH 내 OP를 업데이트했습니다. 이로 인해 오류가 발생했습니다. 그러나 그것은 내가 원하는 것처럼 여전히 작동하지 않습니다. – SCGB
프레임 전체에 걸쳐 일부 상태를 보존해야합니다. 적어도 "wanderAngle"과 "velocity"벡터. 게임 시작시'Randomize()'를 한 번만 호출하십시오. 'circleMiddle'은'velocity * circleRadius' 여야합니다. 'velocity'는 마지막에'circleMiddle + wanderForce'와'enemyPosition + = velocity * enemySpeed'로 업데이트되어야합니다. 솔직히이 전체 코드는 약간 이상하게 보입니다. 물리적 인 개념이 섞여 있습니다. 힘은 신체의 가속도 (질량과 함께)에 영향을 미치고, 가속도는 속도에 영향을 주며 (시간 단계와 함께) 속도는 위치에 영향을줍니다 (시간 단계와 함께). –