Перейти к содержимому


Фотография
- - - - -

снаряды не летают

javascript js jquery

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 Sergey Kalinin

Sergey Kalinin

    Ампиратор

  • Забанен
  • 3 429 сообщений

Отправлено 01.01.2016, 17:52

предлагаю вопросик тем, кому в суровые праздничные дни не лень покопаться в говнокоде. скажите пожалуйста где ошибка

 

есть скриптик: https://jsfiddle.net/6ctL745b/5/

github: https://github.com/z...ak/afrika_tanks

 

вроде бы всё работает. танки передвигаются в пределах поля и даже иногда стреляют снарядами. проблема в том, что иногда после попадания снаряда в танк, остальные снаряды(в том числе и выпущенные после момента попадания) останавливаются в пространстве. при этом в консоли появляется следующее сообщение об ошибке: 

Uncaught TypeError: Cannot read property 'direction' of undefined    (index):327

 

 

то есть каждый объект снаряда теряет свойство direction. а это свойство задаётся только один раз(при нициализации объекта снаряда в методе setBulletDirection()). непонятная фигня


Сообщение отредактировал Sergey Kalinin: 01.01.2016, 17:59

"Людей я люблю, но их надо п****ть"©Александр Баширов

#2 anon

anon

    Почетный житель

  • Почетный житель
  • 503 сообщений

Отправлено 01.01.2016, 18:45

то есть каждый объект снаряда теряет свойство direction. а это свойство задаётся только один раз(при нициализации объекта снаряда в методе setBulletDirection()). непонятная фигня

Неа, ты неправильно понял ошибку. Ты пытаешься прочитать свойство direction у (уже) несуществующего объекта.

Я ошибку не смог воспроизвести, но у тебя есть вот такая строчка там:

this.direction = Tank.tanks[this.ownerId].direction;


Чисто логически, снаряд может существовать без танка. А у тебя получается, что танк стрельнул, его тут же убили, а снаряд летит и пытается обратиться к несуществующему элементу массива.

#3 Sergey Kalinin

Sergey Kalinin

    Ампиратор

  • Забанен
  • 3 429 сообщений

Отправлено 01.01.2016, 18:49

 

то есть каждый объект снаряда теряет свойство direction. а это свойство задаётся только один раз(при нициализации объекта снаряда в методе setBulletDirection()). непонятная фигня

Неа, ты неправильно понял ошибку. Ты пытаешься прочитать свойство direction у (уже) несуществующего объекта.

Я ошибку не смог воспроизвести, но у тебя есть вот такая строчка там:

this.direction = Tank.tanks[this.ownerId].direction;


Чисто логически, снаряд может существовать без танка. А у тебя получается, что танк стрельнул, его тут же убили, а снаряд летит и пытается обратиться к несуществующему элементу массива.

 

да всё равно не понятно. я же для того чтобы снаряд не пытался обратиться к несуществующему танку поместил эту строчку в условие:

        if(!this.direction) {
            this.direction = Tank.tanks[this.ownerId].direction;
        };

то есть если снаряд летит и свойство direction у снаряда установлено, то он не будет больше теребить объект танка. а устанавливается свойство direction для снаряда только один раз - в момент создания снаряда


Сообщение отредактировал Sergey Kalinin: 01.01.2016, 18:51

"Людей я люблю, но их надо п****ть"©Александр Баширов

#4 potapko

potapko

    Старожил

  • Житель
  • 344 сообщений

Отправлено 01.01.2016, 18:54

http://i.imgur.com/aHWPxEB.png 

Из массива неправильно удаляется элемент. Нужно array.splice(index,1).  http://i.imgur.com/AHhd1uP.png . Соответственно, эта проверка http://i.imgur.com/lhkQg8e.png не нужна.

 

Сейчас логика такая. Создается массив новых снарядов. Далее циклом по всем снарядам вызывается метод Move(). Если в этом методе срабатывает checkTankCollision(), то удаляется танк. Но у новосозданных снарядов этого удаленного танка свойство direction не определено. Соответсвенно далее по циклу будет эксепшен при установке этого свойства. Устаналивай свойство в конструкторе http://i.imgur.com/eouL2HZ.png


Сообщение отредактировал potapko: 01.01.2016, 18:57


#5 Sergey Kalinin

Sergey Kalinin

    Ампиратор

  • Забанен
  • 3 429 сообщений

Отправлено 01.01.2016, 19:35

вопрос снят. спасибо всем


"Людей я люблю, но их надо п****ть"©Александр Баширов

#6 pavel022

pavel022

    Критик

  • Небожитель
  • PipPipPipPipPipPipPip
  • 18 982 сообщений

Отправлено 02.01.2016, 02:16

вот вы маньяки))



#7 Авиатор

Авиатор

    Аксакал

  • Почетный житель
  • PipPipPipPip
  • 2 362 сообщений

Отправлено 02.01.2016, 08:13

Что за игра такая?Илил новую создаёшь?







Темы с аналогичным тегами javascript, js, jquery

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей