Помогите! Не могу сделать поворот башни на танке!
Вложений: 1
Хочу сделать игру на js, дошло дело до башни и тут у меня появилась проблема, мне надо сделать так чтобы башня поварачивалась за курсором с заданой скорость, но у меня не получается. :(
Весь инет перешарил, но ничего не нашёл. :( Пожалуйста помогите:help: , буду очень благодарен.:thanks: Вот мои коды(Полный код есть в архиве): js/gameprocces.js var Timer = { Work: null, Implement: 0, Update: 10, Time: 0, MilliSeconds: 0, Seconds: 0, Minutes: 0, Hours: 0, Day: 0} var Key = [ [87, "false", 0, "W"], [65, "false", 0, "A"], [83, "false", 0, "S"], [68, "false", 0, "D"]], Zoom = 1, CanvasGame = document.querySelector("#CanvasGame"), GC = CanvasGame.getContext("2d"), Display = { Center: { X: document.documentElement.clientWidth / 2, Y: document.documentElement.clientHeight / 2 } }, Angle = { Body: {Rotate: Math.PI, X: null, Y: null, route: null}, Tower: {Rotate: Math.PI, X: null, Y: null, route: null, two: null}, Mouse: {Rotate: Math.PI, X: null, Y: null, two: null} }, Position = { Mouse: {X: null, Y: null, Click: {X: null, Y: null}, From: { Display: { Center: { X: null, Y: null } } } } } CanvasGame.width = document.documentElement.clientWidth; CanvasGame.height = document.documentElement.clientHeight; var GameProcess = { Work: null, Implement: 0, Update: 1 } var Draw = { Work: null, Implement: 0, Update: 10 } Timer.Work = setInterval(function() { Timer.Implement++; Timer.Time++; Timer.MilliSeconds++; if (Timer.MilliSeconds == 100) {Timer.Seconds++; Timer.Milliseconds = 0} if (Timer.Seconds == 60) {Timer.Minutes++; Timer.Seconds = 0} if (Timer.Minutes == 60) {Timer.Hours++; Timer.Minutes = 0} if (Timer.Hours == 60) {Timer.Days++; Timer.Hours = 0} }, Timer.Update) document.addEventListener('mousemove', function (e) { Position.Mouse.X = e.pageX; Position.Mouse.Y = e.pageY }, false) document.addEventListener('click', function (e) { Position.Mouse.Click.X = e.pageX; Position.Mouse.Click.Y = e.pageY }, false) document.addEventListener('keydown', function (e) { for (var I = 0; I < Key.length; I++) { if (e.keyCode == Key[I][0]) Key[I][1] = "true"} }, false) document.addEventListener('keyup', function (e) { for (var I = 0; I < Key.length; I++) { if (e.keyCode == Key[I][0]) Key[I][1] = "false"} }, false) GameProcess.Work = setInterval(function() { Position.Mouse.From.Display.Center.X = Display.Center.X - Position.Mouse.X; Position.Mouse.From.Display.Center.Y = Display.Center.Y - Position.Mouse.Y; if (Position.Mouse.From.Display.Center.X == 0) (Position.Mouse.From.Display.Center.Y > 0) ? (3 * Math.PI) / 2 : Math.PI / 2; Angle.Mouse.Rotate = Math.atan(Position.Mouse.From.Display.Center.Y / Position.Mouse.From.Display.Center.X); Angle.Mouse.Rotate += Math.PI/2; if (Position.Mouse.From.Display.Center.X < 0) Angle.Mouse.Rotate = Angle.Mouse.Rotate - Math.PI; Angle.Mouse.X = Math.sin(Angle.Mouse.Rotate); Angle.Mouse.Y = Math.cos(Angle.Mouse.Rotate); if (Key[1][1] == "true") Angle.Body.Rotate -= Math.PI/1024; if (Key[3][1] == "true") Angle.Body.Rotate += Math.PI/1014; if (Angle.Body.Rotate > Math.PI) Angle.Body.Rotate = -Angle.Body.Rotate + Math.PI/1024; if (Angle.Body.Rotate < -Math.PI) Angle.Body.Rotate = -Angle.Body.Rotate - Math.PI/1024; /*if (Angle.Tower.Rotate > Math.PI) Angle.Tower.Rotate = -Angle.Tower.Rotate + 0.03; if (Angle.Tower.Rotate < -Math.PI) Angle.Tower.Rotate = -Angle.Tower.Rotate - 0.03;*/ /*if (Angle.Tower.Rotate != Angle.Mouse.Rotate) { if (Angle.Mouse.Rotate < Angle.Tower.Rotate && Angle.Mouse.Rotate > 0 && Angle.Tower.Rotate > 0) {Angle.Tower.Rotate -= 0.01} if (Angle.Mouse.Rotate > Angle.Tower.Rotate && Angle.Mouse.Rotate > 0 && Angle.Tower.Rotate > 0) {Angle.Tower.Rotate += 0.01} if (Angle.Mouse.Rotate < Angle.Tower.Rotate && Angle.Mouse.Rotate < 0 && Angle.Tower.Rotate < 0) {Angle.Tower.Rotate -= 0.01} if (Angle.Mouse.Rotate > Angle.Tower.Rotate && Angle.Mouse.Rotate < 0 && Angle.Tower.Rotate < 0) {Angle.Tower.Rotate += 0.01} if (Angle.Mouse.Rotate < Angle.Tower.Rotate && Angle.Mouse.Rotate < 0 && Angle.Tower.Rotate > 0) {Angle.Tower.Rotate += 0.01} if (Angle.Mouse.Rotate > Angle.Tower.Rotate && Angle.Mouse.Rotate > 0 && Angle.Tower.Rotate < 0) {Angle.Tower.Rotate -= 0.01} if (Angle.Mouse.Rotate < Angle.Tower.Rotate && Angle.Mouse.Rotate > 0 && Angle.Tower.Rotate < 0) {Angle.Tower.Rotate += 0.01} if (Angle.Mouse.Rotate > Angle.Tower.Rotate && Angle.Mouse.Rotate < 0 && Angle.Tower.Rotate > 0) {Angle.Tower.Rotate -= 0.01} }*/ /*if (Angle.Tower.Rotate > 0 && Angle.Mouse.Rotate > 0) {Angle.Tower.two = Angle.Tower.Rotate - Angle.Mouse.Rotate} //if (Angle.Tower.Rotate < 0 && Angle.Mouse.Rotate < 0) {Angle.Tower.two = Angle.Tower.Rotate - Angle.Mouse.Rotate} //if (Angle.Tower.Rotate < 0 && Angle.Mouse.Rotate > 0) {Angle.Tower.two = Math.PI - Angle.Tower.Rotate + Angle.Mouse.Rotate} //if (Angle.Tower.Rotate > 0 && Angle.Mouse.Rotate < 0) {Angle.Tower.two = Math.PI - Angle.Tower.Rotate + Angle.Mouse.Rotate}*/ //Angle.Tower.two = Angle.Tower.Rotate - ((Angle.Mouse.Rotate < 0) ? -Angle.Mouse.Rotate : Angle.Mouse.Rotate); //Angle.Tower.two = Angle.Tower.Rotate - Angle.Mouse.Rotate; if(Angle.Mouse.Rotate <= Math.PI && Angle.Mouse.Rotate >= 0) {Angle.Mouse.two = Math.abs(Angle.Tower.Rotate) + Math.abs(Angle.Mouse.Rotate)}; if(Angle.Mouse.Rotate > -Math.PI && Angle.Mouse.Rotate < 0) {Angle.Mouse.two = -Math.abs(Angle.Tower.Rotate) + Math.abs(Angle.Mouse.Rotate)}; //if(Angle.Mouse.Rotate > 0) {Angle.Mouse.two = Math.abs(Angle.Tower.Rotate) - Math.abs(Angle.Mouse.Rotate)}; if(Angle.Mouse.two > 0) Angle.Tower.Rotate -= 0.01 if(Angle.Mouse.two < 0) Angle.Tower.Rotate += 0.01 //Angle.Mouse.two = Angle.Mouse.Rotate - Angle.Tower.Rotate; Angle.Mouse.X = Math.sin(Angle.Mouse.Rotate); Angle.Mouse.Y = Math.cos(Angle.Mouse.Rotate); Angle.Tower.X = Math.sin(Angle.Tower.Rotate); Angle.Tower.Y = Math.cos(Angle.Tower.Rotate); Angle.Body.X = Math.sin(Angle.Body.Rotate); Angle.Body.Y = Math.cos(Angle.Body.Rotate); GameProcess.Implement++; }, GameProcess.Update) Draw.Work = setInterval(function() { Draw.Implement++; GC.clearRect(0, 0, document.documentElement.clientWidth, document.documentElement.clientHeight); GC.beginPath(); GC.arc(Display.Center.X, Display.Center.Y, 1, 0, Math.PI * 2, false); GC.stroke(); GC.beginPath(); GC.lineTo(Display.Center.X, Display.Center.Y); GC.lineTo(Display.Center.X - 100 * Angle.X, Display.Center.Y + 100 * Angle.Y); GC.stroke(); GC.beginPath(); GC.lineTo(Display.Center.X, Display.Center.Y); GC.lineTo(Display.Center.X - 100 * Angle.Body.X, Display.Center.Y + 100 * Angle.Body.Y); GC.stroke(); GC.beginPath(); GC.lineTo(Display.Center.X, Display.Center.Y); GC.lineTo(Display.Center.X - 100 * Angle.Tower.X, Display.Center.Y + 100 * Angle.Tower.Y); GC.stroke(); GC.beginPath(); GC.lineTo(Display.Center.X, Display.Center.Y); GC.lineTo(Display.Center.X - 100 * Angle.Mouse.X, Display.Center.Y + 100 * Angle.Mouse.Y); GC.stroke(); GC.beginPath(); GC.arc(Display.Center.X + 100 * Angle.Tower.X, Display.Center.Y - 100 * Angle.Tower.Y, 1, 0, Math.PI * 2, false); GC.stroke(); }, Draw.Update) var Information = setInterval( function () { document.getElementById("Key.Down.WASD[0]").innerHTML = Key[0][1]; document.getElementById("Key.Down.WASD[1]").innerHTML = Key[1][1]; document.getElementById("Key.Down.WASD[2]").innerHTML = Key[2][1]; document.getElementById("Key.Down.WASD[3]").innerHTML = Key[3][1]; document.getElementById("Angle.Body.Rotate").innerHTML = Angle.Body.Rotate; document.getElementById("Angle.Tower.Rotate").innerHTML = Angle.Tower.Rotate; document.getElementById("Angle.Mouse.Rotate").innerHTML = Angle.Mouse.Rotate; document.getElementById("Angle.Tower.two").innerHTML = Angle.Tower.two; document.getElementById("Angle.Mouse.two").innerHTML = Angle.Mouse.two; }, 30) index.html <!DOCTYPE html> <html> <head> <title>Title</title> <link rel="stylesheet" href="css/main.css"> </head> <body id="Body"> <canvas id="CanvasGame"></canvas> <div id="Information"> <p>W: <span id="Key.Down.WASD[0]"></span></p> <p>A: <span id="Key.Down.WASD[1]"></span></p> <p>S: <span id="Key.Down.WASD[2]"></span></p> <p>D: <span id="Key.Down.WASD[3]"></span></p> <p>Angle body rotate: <span id="Angle.Body.Rotate"></span></p> <p>Angle tower rotate: <span id="Angle.Tower.Rotate"></span></p> <p>Angle mouse rotate: <span id="Angle.Mouse.Rotate"></span></p> <p>Angle tower two: <span id="Angle.Tower.two"></span></p> <p>Angle mouse two: <span id="Angle.Mouse.two"></span></p> </div> <canvas id="Protection"></canvas> <script src="js/moduls.js"></script> <script src="js/militaryequipment.js"></script> <script src="js/gameprocess.js"></script> </body> </html> |
Ответ на Rise:
Цитата:
Time.Work - считает время, обновляется за 10 миллисекунд, чтобы точно рассчитать время); GameProcess.Work - игровой процесс (Физика, подсчёты и т.д), обновляется за 1 миллисекунд, чтобы всё игровые процессы выполнялись быстро; Draw.Work - рисование моделей, но пока-что поворот башни в разработке Я использую тока контуры, обновляется за 30 миллисекунд, чтобы не повышать нагрузку; Information - Выводить информацию (Я потом её уберу). Если можно сделать лучше, говорите (как :)). Спасибо за внимание! |
Ответ на Rise:
Цитата:
Я просто не знаю как её сделать. Вот это часть отвечает за поворот башни (Часть закомментирована так как они неправильно работают, да и впрочем всё остальное, а труды стирать неохото :)): 092 if (Angle.Tower.Rotate < -Math.PI) Angle.Tower.Rotate = -Angle.Tower.Rotate - 0.03;*/ 093 /*if (Angle.Tower.Rotate != Angle.Mouse.Rotate) { 094 if (Angle.Mouse.Rotate < Angle.Tower.Rotate && Angle.Mouse.Rotate > 0 && Angle.Tower.Rotate > 0) {Angle.Tower.Rotate -= 0.01} 095 if (Angle.Mouse.Rotate > Angle.Tower.Rotate && Angle.Mouse.Rotate > 0 && Angle.Tower.Rotate > 0) {Angle.Tower.Rotate += 0.01} 096 if (Angle.Mouse.Rotate < Angle.Tower.Rotate && Angle.Mouse.Rotate < 0 && Angle.Tower.Rotate < 0) {Angle.Tower.Rotate -= 0.01} 097 if (Angle.Mouse.Rotate > Angle.Tower.Rotate && Angle.Mouse.Rotate < 0 && Angle.Tower.Rotate < 0) {Angle.Tower.Rotate += 0.01} 098 099 if (Angle.Mouse.Rotate < Angle.Tower.Rotate && Angle.Mouse.Rotate < 0 && Angle.Tower.Rotate > 0) {Angle.Tower.Rotate += 0.01} 100 if (Angle.Mouse.Rotate > Angle.Tower.Rotate && Angle.Mouse.Rotate > 0 && Angle.Tower.Rotate < 0) {Angle.Tower.Rotate -= 0.01} 101 if (Angle.Mouse.Rotate < Angle.Tower.Rotate && Angle.Mouse.Rotate > 0 && Angle.Tower.Rotate < 0) {Angle.Tower.Rotate += 0.01} 102 if (Angle.Mouse.Rotate > Angle.Tower.Rotate && Angle.Mouse.Rotate < 0 && Angle.Tower.Rotate > 0) {Angle.Tower.Rotate -= 0.01} 103 }*/ 104 /*if (Angle.Tower.Rotate > 0 && Angle.Mouse.Rotate > 0) {Angle.Tower.two = Angle.Tower.Rotate - Angle.Mouse.Rotate} 105 //if (Angle.Tower.Rotate < 0 && Angle.Mouse.Rotate < 0) {Angle.Tower.two = Angle.Tower.Rotate - Angle.Mouse.Rotate} 106 //if (Angle.Tower.Rotate < 0 && Angle.Mouse.Rotate > 0) {Angle.Tower.two = Math.PI - Angle.Tower.Rotate + Angle.Mouse.Rotate} 107 //if (Angle.Tower.Rotate > 0 && Angle.Mouse.Rotate < 0) {Angle.Tower.two = Math.PI - Angle.Tower.Rotate + Angle.Mouse.Rotate}*/ 108 //Angle.Tower.two = Angle.Tower.Rotate - ((Angle.Mouse.Rotate < 0) ? -Angle.Mouse.Rotate : Angle.Mouse.Rotate); 109 //Angle.Tower.two = Angle.Tower.Rotate - Angle.Mouse.Rotate; 110 if(Angle.Mouse.Rotate <= Math.PI && Angle.Mouse.Rotate >= 0) {Angle.Mouse.two = Math.abs(Angle.Tower.Rotate) + Math.abs(Angle.Mouse.Rotate)}; 111 if(Angle.Mouse.Rotate > -Math.PI && Angle.Mouse.Rotate < 0) {Angle.Mouse.two = -Math.abs(Angle.Tower.Rotate) + Math.abs(Angle.Mouse.Rotate)}; 112 //if(Angle.Mouse.Rotate > 0) {Angle.Mouse.two = Math.abs(Angle.Tower.Rotate) - Math.abs(Angle.Mouse.Rotate)}; 113 if(Angle.Mouse.two > 0) Angle.Tower.Rotate -= 0.01 114 if(Angle.Mouse.two < 0) Angle.Tower.Rotate += 0.01 115 //Angle.Mouse.two = Angle.Mouse.Rotate - Angle.Tower.Rotate; Спасибо за внимание, Rise! ^-^ |
Ответ на Rise:
Вложений: 2
Цитата:
Спасибо за внимание, Rise! ^-^ |
Ответ на Rise:
Да, но есть 1 недочёт (Должен быт какой нибудь процесс который поможет выбрать куда поворачиваться башне, то есть если мышка будет больше повёрнута право то башня начнёт поворачиваться вправо, если лева то влево. Я думаю вы его заметили. Если есть возможность, то исправьте его пожалуйста. Спасибо! ^-^
|
Ответ на Rise:
Вложений: 1
Я извиняюсь, Я неправильно написал. :) Я думаю по этой картинке всё должно быть понятно.
|
Благодарности Risе'у
Сппппппппппааааасссиииббо оо огромное Rise!!!!:thanks: Я думаю что тема закрыта, осталось тока подробнее разобрать ваш код, и вопрос как тему закрыть то? :)
|
Rise,
:victory: |
Очень круто! :) Тока бот врезался в стенку и остановился.
|
Часовой пояс GMT +3, время: 20:51. |