Я много занимался разработкой 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>
?Они срабатывают, если кто-то нажимает на прозрачную часть коробочной модели холста (плохо)?Если у меня есть холст с двумя кружками, и мне нужно знать, на каком из них щелкнули мышью, нужно ли делать математические расчеты с положением мыши?(тьфу).
По моему (очень предварительному) опыту, это гораздо больше похоже на обработку, которая позволяет очень легко создавать красивые, неинтерактивные вещи, но кошмар для разработки пользовательского интерфейса.