Как стать автором
Обновить

Комментарии 22

Спасибо большое!
Ябывдул уже не модно писать? «Спасибо большое» теперь модный первый коммент!
github.com/theshock/theshock.github.com — это для тех, кто хочет участвовать в развитии проекта или же просто ознакомиться в исходниками.
*с исходниками
Спасибо) Тут лежит сайт с исходниками примеров, а сам LibCanvas — theshock.github.com/libcanvas
Ссылки эти у меня в закладках пока хоронятся, пока руки не доходят. Но в планах )
Затягивает… зараза
обновил чуток )) сам игрался сегодня с час ))
В данном примере, конечно, в этом смысла нет, но гораздо интересней просчитывать перемещение шарика через углы. В конечном счёте, открывает больший простор для разнообразных действий. Правда реализовать это у меня получилось только в прямоугольной области. С отражением от окружности пока загвоздки.
Ну через углы это конечно лучше, но просто несколько усложнило бы код, да и в игре где все прямоугольное я думаю это было бы неоправданной роскошью ))
Ну да, я то просто добавлял управление с клавиатуры, шариком можно было «летать» :) А здесь это может пригодится в случае добавления гравитационных полей и всяческих, связанных с этим павер-апов.

Что-то я замечтался :)
Я когда начал писать понг на всё дело у меня ушло часа два, и неделя на фарширование его всякими не нужными фичами. В итоге получился Понг в который играть было не интересно. Так что я думаю минимализм в написании понга просто необходим)
вы принципиально не используете ключевое слово «var»?
В данном случае var не используется, т. к. это не переменные, а классы. С ключевым словом «var» методы класса работать не будут.
хм, немного пристальней вгляделся в код. Что вы имеете ввиду под «классами»? В любом случае, внутри функции init() у Вас объявляются переменные start, game, ai, player, ball без ключевого слова var. JavaScript, когда встречает такие объявления, делает такие переменные глобальными (если точнее — свойствами объекта window), поэтому все и работает. Но это очень плохой стиль, т.к. мало того, что засоряется глобальное пространство имен, так еще и понять, где что было объявлено потом очень трудно.

Да, да, я понимаю, что это простенький пример и тут и так все понятно, просто советую Вам в более серъезных задачах так не делать.

И, кстати, даже в Вашем примере, уж если без глобальных переменных было не обойтись, то правильно бы было вверху скрипта сделать объявление:

var start, game, ai, player, ball;
Я, конечно, не силён в яваскрипте. Вполне вероятно, что сморозил глупость.

Я так понял, что start, game, ai, player и ball это не переменные, а объекты класса rect, который содержит поля width, height, color и метод draw. Обычные переменные не могут их содержать.

В любом случае, в Опере вызываемые методы этих объектов не работают, если объекты объявлять с ключевым словом var.
Ах да, этот код совсем не мой :)
код мой )) И он писался сразу по ходу написания поста и поэтому есть некоторые огрешности. Класс всего один, а переменные без var потому что они нужны были глобальные в силу того что их надо было таскать по всем функциям, и как написал safron, правильней их было объявить в начале скрипта
Извините, у вас в листинге об aiMove() в коде допущена ошибка. Вы обращаетесь к свойству vY неизвестного объекта:
y = ai.y + vY;

Должно быть вы обращаетесь к свойству vY объекта ball, тогда должно быть:
y = ai.y + ball.vY;

Прошу прощения, это я ошибся! Не обратил внимание на строку:

var vY = Math.abs(ball.vY)-2

Но не могу понять почему мы отнимаем 2 от ball.vY, если ball.vY по-умолчанию 2. Тогда значение vY всегда будет ровно 0 и ракетка всегда будет стоять на месте.
Так скорость шара после каждого столкновения со стенкой немного увеличивается и потому vY равен 0 только в самом начале.
ball.x += ball.vX; ball.y += ball.vY;
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации