Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
JavaScript меню https://www.cyberforum.ru/ javascript/ thread1815347.html
Скажите, пожалуйста, способ создания меню. когда я нажимаю на кнопку, не перезагружать страницу но включить файл в теге
Работа с ячейками в таблице html JavaScript
Ребят, есть обычная html-таблица (см. изображение). Нужно рассчитать, к примеру, количество 4 у каждого студента (в цикле). Помогите, пожалуйста.
JavaScript почему не работает скрипт? https://www.cyberforum.ru/ javascript/ thread1815313.html
почему не работает скрипт? function myfunction(){ document.write("<?php include 'file.php';?>"); }
JavaScript Изменение размера картинок с учётом заданного значения Добрый день! Помогите решить проблему) Html документ содержит картинки. Необходимо ввести правило, чтобы картинки больше заданного значения становились одного конкретного размера, а картинки меньше заданного значения - другого размера. Можно как-то прописать условие в CSS? https://www.cyberforum.ru/ javascript/ thread1815238.html
Как подключить js файл с php-вставками к joomla-модулю? JavaScript
Для того чтобы сервер не игнорировал php - вставки в *.js файлах, в файле .htaccess прописал следующий код: AddType application/x-httpd-php .js AddHandler x-httpd-php5 .js <FilesMatch "\.(js|php)$"> SetHandler application/x-httpd-php </FilesMatch>
JavaScript Что такое "объектные константы" в JavaScript? https://www.cyberforum.ru/ javascript/ thread1815203.html
Привет. Читаю учебник по backbone. Там в начале такая фраза есть: "Я рассчитываю, что ваши знания языка JavaScript не ограничиваются его основами, поэтому опустил рядтем, таких как объектные константы. " А что такое "объектные константы"? В гугле ничего не нашёл. Может это перевод неточный и это как то по другому называется?
JavaScript Расширение для гугл хрома. Настройка политики безопасности в манифесте https://www.cyberforum.ru/ javascript/ thread1815183.html
Калит уже этот параноик. Сначала оказалось, что в приложениях нельзя писать javascrit код непосредственно на странице, только можно подключать локальные библиотеки. Так теперь я ещё и функцию не могу вызвать со страницы(со 2й версии манифеста политика безопасности изменилась). В официальной справке написано: The inline event handler definitions must be rewritten in terms of...
Откуда берётся NaN? JavaScript
Замучился со скриптом, который должен выводить результат числового подсчёта. В нём 3 составляющих: function totalcost () { var cost = parseFloat(document.getElementById("cost").value); var total = parseFloat(document.getElementById("total").value); var result = total - cost * document.getElementById("multiply").value * 25; ... В HTML с помощью php все значения вставляются...
JavaScript Сохранение состояния checkbox в localStorage https://www.cyberforum.ru/ javascript/ thread1815033.html
Вот у меня есть несколько флажков(ну штук 30 допустим): <input type="checkbox" id="ch1" name="ch1" onclick="save_checkbox(1, "ch1")"> <input type="checkbox" id="ch2" name="ch2" onclick="save_checkbox(2, "ch2")"> <input type="checkbox" id="ch3" name="ch3" onclick="save_checkbox(3, "ch3")"> Хочу сделать одну функцию для сохранения их значения: Но из - за отсутствия знаний...
JavaScript Прокрутка барабана свайпом Javascript https://www.cyberforum.ru/ javascript/ thread1814813.html
Доброго времени суток, уважаемые пользователи! Есть ли пример реализации прокрутки барабана (рулетки) свайпом? Барабан с определенным количеством позиций. Есть ли идеи, как можно реализовать анимацию прокрутки?
Создание строки в таблице JavaScript
Привет всем. Помогите пожалуйста. есть шапка таблицы из пяти колонок, внизу есть кнопка "Добавить строку". Как с помощью JavaScript сделать так, чтобы при нажатии на кнопку добавлялась строка в таблицу из пяти input и при обновлении страницы эта строка не удалялась? Киньте пожалуйста код. <center> <H1 id="text"><em>Таблица</em></H1> <table border> <tr> <th>Колонка 1</th><th...
JavaScript Css-селектор "отсутствия атрибута" https://www.cyberforum.ru/ javascript/ thread1814747.html
на странице имеется множество HTMLэлементов input у большинства этих HTMLэлементов прописан атрибут type но есть и HTMLэлементы input, у которых type не указан: понятное дело, по умолчанию браузер отображает их как текстовые поля вопрос: можно ли, и как сконструировать CSS-селектор, который выберет все HTMLэлементы input, у которых не прописан атрибут type?
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
0

Ваша первая игра на JavaScript и Phaser (перевод) - JavaScript - Ответ 9587440

28.09.2016, 17:42. Показов 2712. Ответов 2
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Ваша первая игра на JavaScript и Phaser (перевод)

Источник

Запустить демку в браузере

Скачать исходники финального проекта

Все любят классические игры. Многие же из вас помнят ретро игру "змейка" на старых Nokia? Мы уверены, что многие. Поэтому мы решили сделать "змейку", используя HTML5. Есть такой великолепный фреймворк с открытым исходным кодом для разработки игры под названием Phaser. Его мы и будем использовать.

Приготовления

Скачайте .zip архив с рисунками и с пустыми файлами кода здесь. Код мы напишем позже. Папки и файлы отражают структуру нашего проекта.

Откройте index.html, напишите название игры в теле тега "title" и подключите скрипты из папки "assets/js/". Позже, чтобы играть вам нужно будет всего лишь открыть index.html в браузере.

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Snake</title>
    <script src="assets/js/phaser.min.js"></script>
    <script src="assets/js/game.js"></script>
    <script src="assets/js/menu.js"></script>
    <script src="assets/js/game_over.js"></script>
    <script src="assets/js/main.js"></script>
</head>
<body>
 
</body>
</html>
Сейчас ваша рабочая директория должна выглядеть так:



Как организована игра

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

Это состояния нашей игры:
  • Состояние "Меню". Управляется скриптом menu.js. Это состояние отображает рисунок стартового меню. Когда пользователь кликнет по стартовому рисунку, то состояние "Меню" перейдёт в состояние "Игра"
  • Состояние "Игра". Управляется скриптом game.js. Здесь непосредственно происходит игра. Вы управляете змейкой, едите яблоки и просто получаете радость от процесса. Когда змейка умирает, то состояние "Игра" переходит в состояние "Game_Over"
  • Состояние "Game_Over". Это состояние показывает рисунок "gameover.png" и показывает сколько вы набрали очков. Когда вы кликните, то произойдёт переход в состояние "Игра"

main.js - это наш самый главный скрипт. В этом скрипте мы сейчас создадим объект game и добавим наше первое состояние "Меню"

1. Загрузка изображения

К настоящему моменту наша игра не делает ничего. Давайте добавим состояние "Меню" и сделаем так, чтобы оно отображало изображение с заголовком игры.

В разделе "Установка" мы подключили скрипт phaser.js в нашем файле index.html, поэтому нам доступен глобальный объект Phaser, с помощью которого мы можем получать доступ к функциям и методам библиотеки phaser.js

Сейчас мы, используя глобальный объект Phaser, создадим объект game. Этот объект представляет всю нашу игру. Мы будем добавлять состояния к этому объекту.

main.js

Javascript
1
2
3
4
5
6
7
8
9
10
var game;
 
// Создание объекта game (600 пикселей в ширину и 450 пикселей в высоту)
game = new Phaser.Game(600, 500, Phaser.AUTO, '');
 
// Первый параметр - название нашего состояния
// Второй параметр - объект, который будет хранить методы нашего состояния
game.state.add('Menu', Menu);
 
game.state.start('Menu');
Теперь нам нужно создать и инициализировать объект Menu (который мы задействовали в скрипте выше). Откройте скрипт menu.js и добавьте объект Menu и методы для него (смотрите листинг ниже).

menu.js

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var Menu =
    {
        preload: function ()
        {
            // Загрузка изображения, которое нам
            // будет необходимо позже для создания спрайта
            // Первый аргумент - название, по которому мы будем обращаться к
            // изображению
            // Второй аргумент - путь к файлу изображения
            game.load.image('menu', './assets/images/menu.png');
        },
 
        create: function ()
        {
            // Создаём и добавляем спрайт в нашу игру. Спрайтом будет
            // игровой лого для меню
            // Аргументы: X, Y, имя изображения (см. выше)
            this.add.sprite(0, 0, 'menu');
        }
    };
Когда состояние Меню запустится (команда game.state.start('Menu')), то первым делом выполнится тело функции preload, которая загрузит все необходимые ассеты (ассеты - это изображения, звуки, музыка и т.д.). Как только функция preload закончит свою работу, то начнёт выполнятся функция create. В теле функции create должен располагаться код, который инициализирует игру (например, расставляет картинки по требуемым местам). В данном случае, create располагает стартовое изображение меню в координате (0, 0)

От переводчика:
Начало координат игры располагается в левом верхнем углу области рисования. Ось X направлена вправо, а ось Y направлена вниз. По умолчанию якорная точка изображения располагается в левом верхнем углу изображения. Эту точку можно менять с помощью метода anchor.setTo. Например, можно установить якорную точку на середину изображения: this.obj.anchor.setTo(0.5, 0.5); Изображения, которые располагаются в игровом мире называют спрайтами.

Из-за ограничения безопасности браузера мы не можем загружать изображения с локального диска. Простыми словами, мы не можем просто кликнуть два раза по index.html и запустить игру. Поэтому запускать игру нужно с локального сервера, например, из среды Visual Studio, которая автоматически запустит локальный сервер IIS.

Если всё было сделано правильно, то стартовое изображение должно появится в вашем браузере: запустить демку



2. Вывод змейки на экран

Как было упомянуто ранее, сам процесс игры происходит в состоянии "Игра". В этом же состоянии мы выводим змейку на экран. Так же как мы поступали с состоянием "Меню" ранее, мы должны зарегистрировать состояние "Игра" в скрипте main.js:

main.js
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
var game;
 
// Создание объекта game (600 пикселей в ширину и 450 пикселей в высоту)
game = new Phaser.Game(600, 450, Phaser.AUTO, '');
 
// Первый параметр - название нашего состояния
// Второй параметр - объект, который будет хранить методы нашего состояния
game.state.add('Menu', Menu);
 
// Добавляем состояние "Игра"
game.state.add('Game', Game);
 
game.state.start('Menu');
Нужно добавить код в menu.js, который бы позволил перейти из состояния "Меню" в состояние "Игра" по клику мыши. Для этого мы заменим спрайт на главном меню кнопкой. Добавление кнопки очень похоже на добавление спрайта. Вам нужно лишь добавить функцию, которая будет вызываться, когда происходит клик мышью.

Это окончательный код скрипта menu.js:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var Menu =
    {
        preload: function ()
        {
            // Загрузка изображения, которое нам
            // будет необходимо позже для создания спрайта
            // Первый аргумент - название, по которому мы будем обращаться к
            // изображению
            // Второй аргумент - путь к файлу изображения
            game.load.image('menu', './assets/images/menu.png');
        },
 
        create: function ()
        {
            // Создаём и добавляем кнопку в нашу игру. Спрайтом будет
            // игровой лого для меню
            // Аргументы: X, Y, имя изображения (см. выше), функция обработки клика
            this.add.button(0, 0, 'menu', this.startGame, this);
        },
 
        startGame: function ()
        {
            // Меняем состояние "Меню" на состояние "Игра"
            this.state.start('Game');
        }
    };
Теперь мы продолжим писать код для состояния "Игра". Структура кода очень похожа на структуру из скрипта menu.js для состояния "Меню".

game.js

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
var snake, apple, squareSize, score, speed,
    updateDelay, direction, new_direction,
    addNew, cursors, scoreTextValue, speedTextValue,
    textStyle_Key, textStyle_Value;
 
var Game = {
 
    preload: function ()
    {
        // Здесь мы загружаем все необходимые ресурсы для уровня
        // В нашем случае, это просто два квадрата: один для тела змейки и другой для яблока
        game.load.image('snake', './assets/images/snake.png');
        game.load.image('apple', './assets/images/apple.png');
    },
 
    create: function ()
    {
        // Перед стартом игры, мы здесь инициализируем глобальные переменные, объявленные в начале файла
        // Мы сделали эти переменные глобальными, чтобы они были доступны в функции update
        snake = [];                     // Этот список работает как хранилище для частей нашей змейки
        apple = {};                     // Объект для яблока
        squareSize = 15;                // Длина сторон всех наших квадратов (яблока и части для змейки). Наши изображения имеют размер 15x15 пикселей
        score = 0;                      // Игровые очки
        speed = 0;                      // Скорость игры
        updateDelay = 0;                // Переменная для контроля за частотой обновления
        direction = 'right';            // Направление нашей змейки
        new_direction = null;           // Буфер для хранения нового направления
        addNew = false;                 // Переменная, которая показывает, что еда была съедена
 
        // Сообщить Phaser'у, что мы хотим использовать для управления клавиатуру (клавиши со стрелками)
        cursors = game.input.keyboard.createCursorKeys();
 
        game.stage.backgroundColor = '#061f27';
 
        // Генерируем 10 элементов для нашей змейки
        // Начинаем с позиции X=150 Y=150 и увеличиваем X на каждой итерации
        for (var i = 0; i < 10; i++)
        {
            // Параметры: координата X, координата Y, изображение
            snake[i] = game.add.sprite(150 + i * squareSize, 150, 'snake');
        }
 
        // Создаём первое яблоко
        this.generateApple();
 
        // Добавляем текст в верхнюю часть игры
        textStyle_Key = { font: "bold 14px sans-serif", fill: "#46c0f9", align: "center" };
        textStyle_Value = { font: "bold 18px sans-serif", fill: "#fff", align: "center" };
        // Игровые очки
        game.add.text(30, 20, "SCORE", textStyle_Key);
        scoreTextValue = game.add.text(90, 18, score.toString(), textStyle_Value);
        // Скорость игры
        game.add.text(500, 20, "SPEED", textStyle_Key);
        speedTextValue = game.add.text(558, 18, speed.toString(), textStyle_Value);
    },
 
    update: function ()
    {
        // Функция update вызывается постоянно с высокой частотой (где-то около 60 кадров в секунду)
        // обновляя игровое поле
        // Мы пока оставим тело этой функции пустым
    },
 
    generateApple: function ()
    {
        // Выбираем случайное место на игровом поле
        // X между 0 и 585 (39*15)
        // Y между 0 и 435 (29*15)
        var randomX = Math.floor(Math.random() * 40) * squareSize,
            randomY = Math.floor(Math.random() * 30) * squareSize;
 
        // Добавляем новое яблоко
        apple = game.add.sprite(randomX, randomY, 'apple');
    }
};
Так должны сейчас выглядеть змейка, яблоко и вывод текста:



Вернуться к обсуждению:
Ваша первая игра на JavaScript и Phaser (перевод) JavaScript
1
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2016, 17:42
Готовые ответы и решения:

Ваша первая игра на JavaScript и Phaser (тема-обсуждение)
Тема для обсуждения темы https://www.cyberforum.ru/javascript/thread1815477.html Ну смотрите, мы...

Первая ли книга как первая для JavaScript?
]Здравствуйте, хотел бы изучить JavaScript. Мои знания на данный момент: HTML/CSS, основы С++. ...

Ваша первая программа
Какой была ваша первая программа? Я думаю у большинства &quot;Hello, world!&quot; Но например моя первая...

Какая ваша любимая компьютерная игра?
Сабж Добавлено через 3 минуты Мне больше всего нравится ГТА и ФарКрай, еще про снайперов :)

2
28.09.2016, 17:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2016, 17:42
Помогаю со студенческими работами здесь

Первая игра
Делаю 2D игру. На сцене несколько персонажей, нужно выбрать персонажа мышкой и отправить его к...

Первая игра на C++
Всем доброго времени суток. Решил попробовать написать первую игру (тетрис/змейка), подскажите с...

Первая игра на Delphi
Мне нужно сделать проект, любой и я выбрал тему любая 2д игра. Решил сделать аналог игры line...

Первая игра. Pacman
Доброго времени суток. Пишу свою первую игру. Выбор пал на Pacman. В процессе разработки я где-то...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru