HTML5 игра без холста? - PullRequest
       2

HTML5 игра без холста?

4 голосов
/ 27 июля 2011

Я собираюсь написать свою первую игру на HTML5, и все, что я вижу, говорит о Canvas, а затем продолжает говорить о таких вещах, как события, игровые циклы и т. Д.

Я планирую сделать настольную игру, где все изображения выложены на сетке. Не нужно, чтобы происходил игровой цикл, потому что все будет просто так, как есть, пока пользователь не будет взаимодействовать с игрой. А поскольку изображения для доски и фигур лежат на сетке, я мог бы так же легко (насколько я могу судить) использовать теги, выложенные стандартным CSS, вместо того, чтобы рисовать все это в элементе canvas.

Так есть ли причина, по которой я должен беспокоиться о холсте здесь? Имеет ли смысл просто использовать элементы HTML «обычная веб-страница» для создания игрового интерфейса?

Ответы [ 5 ]

9 голосов
/ 27 июля 2011

Canvas отлично подходит для создания игр, где вещи не квадратные, таких как изометрическая игра или игра с шестигранной плиткой, или игра на основе действий, где спрайту игрока требуется широкий диапазон движений, или что-то вроде Angry Birds, где на самом деле ничегона основе сетки.С другой стороны, это, вероятно, излишне, хотя может позволить более быструю обработку изображений и эффекты из-за аппаратного ускорения во многих современных браузерах.

Для того, о чем вы говорите, настольная игра на основе сетки, этопрекрасно использовать обычные элементы HTML.Если вам не понадобятся какие-либо причудливые графические эффекты, вы можете смело игнорировать тег canvas.

Примечание: вы можете использовать canvas для создания динамических анимаций броска костей.Это немного оживит и добавит броскам костей дополнительный эффект ожидания.Или вы можете использовать 6 (или 12) анимированных GIF-файлов, так же легко.

3 голосов
/ 27 июля 2011

Существует значительная разница между html5 / css3 и javascripted тегом canvas.

HTML5 / CSS3
В этом случае вы просто используете обновленные теги для представления контента, модифицированного некоторыми изящными свойствами CSS. Затем вы будете использовать «стандартные» js (и js frameworks) для управления игровой логикой и определения пользовательских взаимодействий и анимаций (или использовать переходы CSS3 для управления любой анимацией).

Как известно, для создания пары прямоугольников:

div#red{
background-color:red;
height:50px;
width:50px;
position:relative;
}
div#blue{
background-color:blue;
height:50px;
width:50px;
position:relative;
}
<div id="red"></div>
<div id="blue"></div>

Если вы хотите создать этот (излишне) HTML5, они могут быть section с вместо div с. CSS3 определенно дает вам много хороших новых функций презентации, в частности такие вещи, как box-shadow.

Canvas
Это принципиально другой способ работы - гораздо ближе к чему-то вроде Flash / Actionscript, где контент и презентация определяются программно, через javascript. Например, вот как вы должны создать похожую пару прямоугольников:

var canvas = document.getElementById("canvas");
function draw() {
  var canvas = document.getElementById("canvas");
  if (canvas.getContext) {
    var ctx = canvas.getContext("2d");
    ctx.fillStyle = "rgb(200,0,0)";
    ctx.fillRect (10, 10, 55, 50);
    ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
    ctx.fillRect (30, 30, 55, 50);
  }

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

Я говорю все это просто, чтобы проиллюстрировать фундаментальное различие в этих двух технологиях. Теперь, ЕСЛИ вы можете делать все, что вы хотите делать с поведением разметки, CSS и JavaScript, а затем делать это любыми способами. В этом нет ничего плохого.

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

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

2 голосов
/ 27 июля 2011

Тогда SVG - правильный выбор для вас. Холст процедурный, SVG декларативный и масштабируемый. http://raphaeljs.com - это отличный фреймворк.

1 голос
/ 22 февраля 2012

Если вы хотите создать игру без дальнейших улучшений, вы можете сделать это без холста.Но использование canvas дает вам много возможностей.Вот некоторые из них:

  1. Все спрайты появляются на холсте, а не в DOM.Добавление / удаление элементов в DOM довольно сложно для браузера;особенно если вы собираетесь использовать CSS-анимацию (для мобильной платформы).Анимация на холсте намного легче.Это еще больше связано с разработкой «requestAnimationFrame».Это значительно улучшит скорость рендеринга.

  2. Вы можете применять различные стили к спрайтам холста и даже изменять их динамически.Холст поддерживает градиенты.Вы можете динамически создавать спрайты, используя операцию «обрезать» в области холста.

  3. Масштабирование всех спрайтов на холсте может быть выполнено только одной функцией «масштабирования».Может быть действительно трудно масштабировать игру, состоящую из большого количества HMTL-тегов.

  4. Легко реализовать игровое поле на основе слоев, используя canvas.Это позволяет с легкостью управлять игровыми элементами.

В нашем Enterra HTML5Poker - http://demo.enterra -poker.com / html5 / index.html мы используем оба canvas иHTML-теги для организации игрового поля.Мы используем общие HTML-теги для организации списков, всплывающих окон и интерактивных элементов;а canvas используется для отображения игрового стола, карточек, аватаров и других элементов.

Использование HTML5 + JS в качестве базовой технологии для разработки игр позволяет легко переносить приложения на различные мобильные платформы.Например iPhone - http://itunes.apple.com/us/app/enterra-poker/id492214596, Android, Windows Phone и другие.

0 голосов
/ 28 декабря 2016

HTML5-теги также можно использовать для создания великолепных игр, даже таких, которые создаются с помощью canvas. Концепция заключается в том, что вы создаете игровой блок (предположим, a), а затем создаете функцию в JavaScript, которая обновляет блок и снова рисует графику. Эта функция сначала устанавливает для innerHTML игрового бокса значение «» (ничего, другой способ очистки графики), а затем создает другие элементы, содержащие текст или изображения, которые должны отображаться в игре. Таким образом, после того, как все игровые теги были объявлены и добавлены, можно использовать функцию requestAnimationFrame () для непрерывного вызова функции. Я создал фреймворк под названием CurveJS, который полностью фокусируется на рендеринге HTML5. Он также дает вам такие возможности, как обрезка, редактирование графики и многое другое, что вы можете найти на холсте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...