Я делаю средневековую игру с видом сверху, используя HTML, JS и холст.
Проблема в том, что мой игрок может бить других, когда на них не смотрит. Я сделал условие в третьей строке приведенного ниже кода для решения этой проблемы, но это не работает, потому что пределы угла обзора игрока составляют max 180
и min -180
. Пределы между положением игрока и положением жертвы - max 90
min -270
. Эти ограничения портят мое состояние.
Я могу принять любые идеи или готовые условия или код.
if(Math.sqrt(Math.pow((this.X-Victim.X),2),Math.pow((this.Y-Victim.Y),2)) <= 100){//<-here calculates distance between victim and player
var angle = Math.atan2(this.X - Victim.X , this.Y - Victim.Y) * (180 / Math.PI);//<-here calculates angle between victim and player
if((angle < this.LookAngle + 45)&&(angle > this.LookAngle - 45)){//<- i need help on here
console.log(angle,this.LookAngle);
//socket.emit('HitTo',{UserName:Victim.UserName,hitval:20});//<- actually you dont need to know this
}
}
if(Math.abs(angle) < this.LookAngle + 45)
помогает? (Кроме того, вам не нужен Math.sqrt: используйте 10000, т.е. 100 * 100 вместо 100, и я почти уверен, что вам следует добавлять эти значения в квадрате, а не ставить между ними запятую.) - person Andrew Morton   schedule 26.10.2019hipotenus*hipotenus = a*a + b*b
@AndrewMorton - person Mert Çelik   schedule 26.10.2019sqrt(a*a + b*b) < x
= ›a*a + b*b < x*x
, и это сэкономит время на вычисление sqrt. Но это лишь часть проблемы. - person Andrew Morton   schedule 26.10.2019if(Math.abs(angle) < this.LookAngle + 45)
помогает? Ссылка: Функция Math.abs () а>. - person Andrew Morton   schedule 26.10.2019-76 != 76
-76 == 284
в градусах - person Mert Çelik   schedule 26.10.2019