Советы по переходу с Flash на <canvas> - PullRequest
4 голосов
/ 20 ноября 2010

Я много занимался разработкой Flash и намеревался некоторое время попробовать canvas, но после просмотра некоторых уроков я не могу понять, как это должно заменить Flash.Возможно, я думаю об этом неправильно?

Примечание : здесь я задаю лот вопросов.Я не ожидаю, что им всем ответят.Что я действительно ищу, так это некоторые основные рекомендации о том, как я должен думать при разработке на <canvas>.

Из спецификации, похоже, что <canvas> действительно более аналогичен классу Graphicsво Flash, который бы использовал что-то вроде этого:

class ColoredCircle extends Sprite {
    private var _color:uint=0x0;

    public function ColoredCircle(color:uint) {
        this.color = color;
    }

    public function set color(value:uint):void {
        _color = value;

        //******** CANVAS FUNCTIONALITY ***********
        this.graphics.clear();
        this.graphics.beginFill(_color);
        this.graphics.drawCircle(0, 0, 10);
        //*****************************************
    }
}

Включающий класс Sprite обладает множеством функциональных возможностей, которые мне действительно нравятся.Такие как:

Отображение списков

var parentSprite:Sprite = new Sprite();    // container for everything

var childSprite:Sprite = new Sprite();     // mid-level container
parentSprite.addChild(childSprite);

var someCircle:ColoredCircle = new ColoredCircle(0xFF0000);  // my circle
childSprite.addChild(someCircle);

someCircle.x = 20;  // my circle moves to the right
childSprite.y = 40; // my circle moves down
parentSprite.rotation = 90; // my circle rotates 90 degrees around a point (20,40) away

Фильтры

// Drop shadow
// note that this is NOT a box shadow 
// - it clings to the visible border of the sprite
someCircle.filters = [new DropShadowFilter(....)];

// Color transforms (could also use the ColorTransform filter)
someCircle.transform.colorTransform = new ColorTransform(.....);

// Can also do blur, glow etc.

Объектно-ориентированный ness

Это в основном тот факт, что я могу создатькласс ColoredCircle, который является графическим объектом, который предоставляет все эти функциональные возможности, но который я могу расширить, сколько захочу.Автоматическое наведение мыши, поведение мыши?Легко.Способность тащиться?Тоже легко.Я могу добавить личные элементы для хранения данных и т. Д. И т. Д. Я могу легко удалить свой элемент из списка отображения (removeChild ()) и добавить его обратно так же легко.

... и другие

Есть миллион других удобств (getBounds() и localToGlobal() / globalToLocal() приходят на ум), но я могу жить без них.Это другие вещи, которые заставляют меня съеживаться.

Итак ... просто используйте много <canvas> s?

Должен ли я относиться к <canvas> как Sprite?Пометка всего как позиции: относительное должно позволить мне в основном дублировать поведение типа списка отображения (я не верю, что вы можете вкладывать <canvas> элементов, но вы могли бы сделать это, добавив <div> с).Однако в своих проектах я использую лот из Sprite с.Это будет метрическая хрень тонких крохотных элементов.Кроме того, как вы обрабатываете события мыши в <canvas>?Они срабатывают, если кто-то нажимает на прозрачную часть коробочной модели холста (плохо)?Если у меня есть холст с двумя кружками, и мне нужно знать, на каком из них щелкнули мышью, нужно ли делать математические расчеты с положением мыши?(тьфу).

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

Ответы [ 6 ]

3 голосов
/ 21 ноября 2010

В разделе CanvasDemos перечислены некоторые хорошие библиотеки холста и прочее.Особый интерес представляет библиотека StrikeDisplay , в основе которой лежит концепция добавления спрайтов к сцене в стиле AS3.

3 голосов
/ 20 ноября 2010

Использование только холста будет ограничительным.Canvas - это в основном BitmapData с несколькими методами класса Graphics.Если вы хотите узнать, как вы можете делать флэш-вещи без флэш-памяти, вы должны взглянуть на jquery и css3 (см. Плагин 2DTransform jquery).

Я был флеш-разработчиком много лет, и когда я решил начать играть с canvas и html5, я просто выбрал вещи, которые я создал во flash, и попытался воссоздать их с помощью javascript html css и т. Д.... вы обнаружите, что большую часть того, что вы делаете во флэш-памяти, можно быстро выполнить с помощью jquery css и иногда canvas.

Возможно, было бы хорошо, если бы вы увидели пример ... может быть, вы могли бы опубликовать ссылку на то, что вы сделали во флэш-памяти, и я укажу на html5 / javascript / canvas эквиваленты.

2 голосов
/ 28 декабря 2010

Э, эй, Эндер.Как их жуки?Я написал StrikeDisplay, который упоминается здесь в ответе geckojsc.Я думаю, что это в значительной степени относится к тому, что вы спрашиваете;по сути, создавая «спрайты» в смысле AS3, плавно и со своими собственными событиями мыши в одном элементе canvas.Он автоматизирует все манипуляции с матрицей самого элемента canvas и перерисовывает необходимые фигуры в каждом кадре, используя вторичный скрытый холст в монохромном режиме, чтобы поймать точки мыши на уровне точки и z-порядок.(Мне интересно, когда парень, который написал Radi, поймет это).Во всяком случае, я бы посоветовал вам проверить это и задать мне любые вопросы, которые возникают с ним.Это все еще в зачаточном состоянии, но опять же, как и вся эта нелепая идея рисовать пиксели в браузере в любом случае, и пока никто точно не уверен, какой будет его парадигма.Насколько я понимаю, AS3 такая же парадигма экранного графика, как и любая другая ...

1 голос
/ 01 июня 2014

Если вы уже знакомы с разработкой Flash, возможно, вы захотите попробовать новый тип документа HTML5 Canvas в Flash Pro CC (доступен с декабря '13).

Эта ссылка дает обзор того, как создавать / повторно использовать богатую графику / анимированный контент, созданный в Flash Pro, и напрямую публиковать в HTML5 Canvas: http://blogs.adobe.com/flashpro/2013/12/03/new_html5_canvas/

В то время как вся графика и анимация могутБыстро экспортироваться в HTML5, из Flash Pro вам потребуется использовать API JavaScript, JavaScript, CreateJS вместо ActionScript для добавления интерактивности.

Модель экранных объектов и общие рабочие процессы, такие как добавление и воспроизведение символов, создание экземпляров среды выполнения,покадровая анимация с событиями, gotoAndPlay и т. д. остается прежней.Кроме того, API-интерфейсы Javascript очень похожи на Actionscript, который также можно использовать в качестве рамочных сценариев.

Вот еще одно руководство по началу работы с HTML5-разработкой Canvas из Flash Pro: http://blogs.adobe.com/flashpro/2013/12/18/actionscript-to-html5-flashpro-cc-2/

1 голос
/ 21 ноября 2010

Я очень рекомендую взглянуть на библиотеку Raphael javascript

1 голос
/ 20 ноября 2010

(после редактирования)

Игнорировать предыдущую версию этого, хотя Canvas был чем-то другим.

В любом случае - вы можете использовать Canvas как структура View в MVC.

  • M odel - JavaScript, также имеет OOP
  • V iew - это будет Canvas
  • C ontroller - JavaScript прослушивает нажатия клавиш и / или мыши, ups

Что плохо, что вам придетсяперестроить некоторые базовые вещи в JavaScript, во Flash такие вещи уже есть в API.Вам потребуется:

  • массив - глобальный список отображения
  • класс DisplayItem - он также будет иметь "Children", "Graphics", "Bitmap", позиции, z-порядок и другие важные переменные
    • Children - еще один массив DisplayItems
    • Graphics - некоторый вид данных, которые вы можете проанализировать и сказать, что с ними делать (нарисовать)
    • Растровое изображение - URL-адрес или фактический объект изображения, который будет использоваться ... Либо это, либо Графика
    • Положение - x, y и поворот - это также должно распределять позиции дочерних элементов при рисовании
    • Z-Order - так что родительский список может быть отсортирован соответственно
    • Область попадания - это будут некоторые данные, указывающие, где мышь не должна игнорироваться
    • other - вы можете захотеть что-то вроде currentFrame для анимации, звук ...
  • запуск сценария рендеринга при необходимости - если ничего не может измениться в текущем состоянии, не перерисовывать, если да, перерисовывать только необходимую область (как вВспышка) на таймере (FPS), поэтому он не будет отображать слишком много
  • контроллер - должен проверить положение мыши и посмотреть, есть ли в этом положении какой-либо DisplayItem с положительной областью попадания, если есть - огоньсобытие для модели (скрипт DisplayItem)

Досадно, что этот вид API нужно переписать, ну да ладно ... Вы получаете это взамен:

  • не требуется плагин
  • высокая производительность в современных браузерах
  • все в одном файле (при необходимости)

Вы еще не получитеСокеты, ByteArrays, API для рисования с поддержкой 3D.

Это только ваше решение, хотите вы этого или нет ...

Также - очевидно, кто-то уже сделал / делает что-то подобное ...И немного расскажу о том, почему JavaScript + Canvas / CSS-игры находятся только на старте:

ссылка

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