JohnJ2
Я рисую в графическом редакторе :) В GIMP или в фотошопе. У меня просто минимальные потребности в этом отношении т.к. рисовать я все равно не умею. Хотя наверняка есть удобные engine-agnostic инструменты для создания красивых менюшек. Вот первое что выдает гугл например. Не знаю что это, но скриншоты симпатичные и описание достаточно вкусное :)
Onni
Даже у тебя не установлен флеш-плеер? Как же так? :)
KEFIR написал:
DisplayList это только часть стандартной библиотеки.
Что значит только? Отсутствие этого "только" в html пять сильно усложняет жизнь. Все библиотеки пытающиеся повторить DisplayList на html5 беднее.
KEFIR написал:
Если бы DisplayList был так прекрасен, то не появились бы супер популярные Starling, Flixel и прочие. А ведь все эти библиотеки исключают возможность использования AFP. Как же так?
С фликселем я почти не работал, бросил его когда понял какие там нужны костыли что бы попасть по объекту мышью.
Старлинг появился потому что stage3d предоставляет по сути те же механизмы что и webgl тут я спорить не буду, в 2D движков использующих 3D ускорение что flash что html5 сейчас примерно на одном уровне. Но если убрать требования к супер-производительной графике, то по всем остальным пунктами, удобство апи, богатсво инструментов, флешовый DisplayList рвет и старлинг и pixi и Kinetic и все другие.
KEFIR написал:
Писал на PIXI.js и даже немного контрибьютил :) Я не знаю о каких сильных уступках ты говоришь. Тот же DisplayList, маски, фильтры, все есть. API полностью покрывает то, что я использовал во флеше + дополнительные плюшки, динамичное развитие и возможность контрибьютить.
У меня тоже есть один коммит в пикси =) А возмодностей мне не хватало, как я уже говорил писал на пикси до знакомства с флешем, и после знакомства я увидет там все чего мне не хватало в пикси.
KEFIR написал:
К этому еще аппаратная поддержка и пользователю не нужно устанавливать плагин (да, флеш уже не входит в поставку браузеров, такие дела). Если выбор между Starling и PIXI.js то очевидный выбор это PIXI.js.
В хроме флеш стоит, а в других браузерах, его помнится и не было никогда.
Не понимаю почему очевидный? Флеш стоит почти на всех машинах, разрабатывать на нем легче, хотя бы за счет строгой типизации (если не дурить).
А если взять мой телефон (не самый новый), то air на нем работает очень шустро, а html5 выдает 1 кадр в две секунды.
KEFIR написал:
Нет, это очень субъективно :) Граф. API уже давно устаканилось. WebGL поддерживают все браузеры, в том числе мобильные. Игр на html5 делается полно. Я не понимаю что вы там называете серьезными проектами? Понятно что крузисы и GTAV на html5 не делают, но в целом игр на html5 очень много.
Да, технология молодая и она сейчас выстреливает. Флеш точно уже можно забыть.
Под зеленой я имел в виду что интсрументария под нее нет устоявшегося и удобного. Под бод "серьезными" я имел в виду социалки\портальные игры, игры для мобилок.
KEFIR написал: Вот первое что выдает гугл например
v0.11
Я пробовал когда была версия 0.10, короче оно только на картинке вкусно, а на деле крешится без причины. Я очень жду когда они выпустят 1.0 потому что это больше всего похоже на то сможет заменить флеш.
KEFIR написал:
Даже у тебя не установлен флеш-плеер? Как же так? :)
Просто не люблю что бы флешки и скрипты сами запускались, я жадный до CPU =)
0nni написал:
Но если убрать требования к супер-производительной графике, то по всем остальным пунктами, удобство апи, богатсво инструментов, флешовый DisplayList рвет и старлинг и pixi и Kinetic и все другие.
Так в чем конкретно? Если не брать в расчет Adobe Flash Professional (который, к слову, совсем не бесплатен).
KEFIR написал:
Так в чем конкретно? Если не брать в расчет Adobe Flash Professional (который, к слову, совсем не бесплатен).
Устоявшееся апи, которому 18 лет, обилие библиотек мощных и устоявшихся фреймворков, тот же RoboticLegs. Обилие решений именно для энтерпрайза.
Мне как инди-разработчику не нужен AdobeFlash, но на работе, когда художник хочет нарисовать модное окошечко или персонажа с красивой анимацией, без него не обойтись. Это один из главных недостатков, нельзя просто его выкинуть и сказать "давай без него".
Еще AIR самый простой способ перенести приложение на мобилки.
Дальше чисто субъективно, я уже писал что js динамически типизированный, в отличие от флеша. Про всякие крутые редакторы мне говорить не надо, не верю что они могут избавиться от всех ошибок типизации.
Как выход вижу TypeScript или Haxe, а их использование говорит о недостатках js как языка.
Так тут спору нет, API получилось удачное, именно поэтому все вот эти библиотеки (Starling, PIXI) полностью повторяют его. Но чем именно они то уступают именно в плане API?
0nni написал:
обилие библиотек мощных и устоявшихся фреймворков, тот же RoboticLegs.
Всего этого добра тоже полно и на JS. Тем более написанное на AS3 легко портируется.
0nni написал:
Обилие решений именно для энтерпрайза.
Это каких? Да что нам до интерпрайза, когда речь идет о небольших играх?
0nni написал:
js динамически типизированный, в отличие от флеша.
Про всякие крутые редакторы мне говорить не надо, не верю что они могут избавиться от всех ошибок типизации.
Как выход вижу TypeScript или Haxe, а их использование говорит о недостатках js как языка.
Ну строго говоря в As3 тоже динамеческая типизация. Указание типов это лишь синтаксический сахар. Ничто не мешает сделать, например, так:
var foo:int = 30;
foo = new Sprite();
И опять все сходится на этом, когда речь идет о JS :) Это уже было здесь и все пришло к этому. Я все еще не могу понять чем именно вам так не угодила динамическая типизация. Я должен знать, расскажите мне :-D Я много лет пишу на языках с динамеческой типизацие (AS2, AS3, JS, PHP...) и не понимаю что именно вас так пугает. При этом переключаясь на язык со статической типизацией (та же Java) также не испытваю каких-то проблем или наоборот облегчения. Разве что автодополнение в редакторе работает лучше.
Я абсолютно комфортно себя чувствую, когда пишу на JS, не понимаю зачем нужен TypeScript. Впрочем надо попробовать, может быть он невероятно изащен. Но подозреваю, что он нужен для тех, кто не может представить себе как программировать вне парадигмы ООП, которую диктует C++ (и которой следуют Java, C# и прочие). Цель HaXe это все же создать язык, который можно транслировать в другие языки.
0nni написал:
У с++ ООП не сильно изящный, я скорее смотрю в сторону java. Но да мне нравится ООП парадигма а js не может мне ее предложить.
Видимо не нравится. Собственно об этом и речь. ООП в C++, Java, C#, Delphi и прочих реализован абсолютно одинаково за исключением синтаксиса. JavaScript же это функциональный язык, это совершенно другая парадигма. Это не хорошо и не плохо, он просто другой. TypeScript же как раз и создан для того, чтобы вернуть людей, привыкших к такой парадигме в зону комфорта. Собственно это тоже не плохо, но как альтернатива можно просто понять и принять JavaScript таким, какой он есть :)
0nni написал:
Языки с динамической типизацией перекладывают на программиста то, что мог бы заметить компилятор. Не хочу думать за компилятор.
Вот почти слово в слово это мне говорили в прошлом сраче Daemon и Mefestofel. Только конкретных примеров что-то так и не привели. Может у тебя есть конкретные примеры? Просто я так и не понял о чем речь и какие такие ошибки, связанные с типами, постоянно выдают компиляторы. Когда я программирую на Java у меня такого нет. Разве что постоянно приходится использовать приведения типов, там где за меня это мог бы сделать компилятор. Например int -> float -> double.
class Character {
function giveCoins(amount, coinType);
}
И где-то в коде забыл поменять вызов giveCoins() и дописать второй аргумент. Где-то я вообще удалил или переименовал метод, а если ты вообще переместил или удалил весь класс? Код на js будет работать ровно до тех пор пока не произойдет вызов неправильного кода.
Что бы избежать такого, весь код нужно покрывать тестами (Ну-ка, кто-то пишет тесты для конкурсов? =)) в типизированных языках ты просто не сможешь запустить такой код. Это экономит и время и нервы, когда твой код падает, и ты начинаешь искать где именно и что ты неправильно передал.
0nni написал:
(Ну-ка, кто-то пишет тесты для конкурсов? =))
Я писал :) правда не много.
Пример хороший. В phpStorm для подобных случаев можно использовать FindUsages, хотя это, конечно, не так хорошо гарантирует от отсутствия ошибки, как прерывание компиляции.
0nni, все так. Вызов функции без аргумента не является ошибкой в js т.к. отсутствие значения это тоже значение (undefined). Это не хорошо и не плохо, опять же :) Такой вот он этот язык. Его можно за это ненавидеть (т.к. приучен к другому), а можно понимать и видеть плюсы. Такое поведение дает широкие возможности в манипуляциях с аргументами функций.
В целом это "проблема" всех интерпретируемых языков, не только js. Многие ошибки в коде вскрываются только во время выполнения. Для тех, кто не может смирится и постоянно наступает на эти грабли и не может работать эффективно и создаются костыли-компиляторы в виде TypeScript :)
Кстати надо будет попробовать его.
Я последнюю игру на конкурс делал с Haxe, который может транслировать код в JS (к тому же еще в 1001 язык, в AS3, C++, C#, Python, PHP, Java, etc), при этом предоставляя AS3-подобный синтаксис. До этого еще делал игру на Pixi.js, используя тот же Haxe, там вообще один-в-один был флеш.
Код на js будет работать ровно до тех пор пока не произойдет вызов неправильного кода.
Более того, он будет до последнего скрывать эту ошибку от тебя, пытаясь работать дальше. Что для некоторых бизнес-ситуаций, вроде банковских транзакций, в корне неверно.
Я повторюсь, наверное. Но JS все никак не может обзавестись вещами, критичными для 21-го века: Модульность, нормальное ООП, исключения и поддержка строго синтаксиса из коробки. Посмотрим, как пойдет ES 6.
Более того, он будет до последнего скрывать эту ошибку от тебя, пытаясь работать дальше.
Если дописать одну строчку, то нет:
if (coinType == undefined) alert('aaaaaa');
А по поводу "нормального ООП" - javascript вообще не объекто-ориентированный (хотя объекты в нём есть). Я бы сказал, он событийно-ориентированный. Хотя официально, конечно, прототипно-ориентированный. В этом есть своя изюминка и для некоторых случаев он оказывается более удобным, чем языки с ООП.
На мой взгляд, javascript не нужна строгая типизация, ведь это сценарный язык. Другое дело, что браузеры могли бы встраивать поддержку ещё какого-либо языка. ActionScript, например, либо python.
JohnJ2 написал:
Если дописать одну строчку, то нет:
if (coinType == undefined) alert('aaaaaa');
Так а какая разница, логика-то сломана? А если функции вообще нет такой? перед вызовом проверять?
if (typeof user.giveCoin == "Function")
Только грамотные тесты помогут все варианты проверить.
Еще по опыту скажу про поведение this в прототипах и функциях. Я не скажу что поведение ее нелогично, но это очень трудно держать в голове чем у тебя равно this сейчас.
Daemon написал:
Более того, он будет до последнего скрывать эту ошибку от тебя, пытаясь работать дальше. Что для некоторых бизнес-ситуаций, вроде банковских транзакций, в корне неверно.
Он не скрывает ошибок, просто в понятиях js описанная ситуация с аргументами это вообще не ошибка. Это точно такая же особенность языка, как например отсутствие сборщика мусора в C/C++. Ее надо иметь в виде и тогда все будет нормально. Но ошибок не избежать в любом языке. Человеческий фактор.
Daemon написал:
Я повторюсь, наверное. Но JS все никак не может обзавестись вещами, критичными для 21-го века:
Модульность
Есть. Из коробки в node.js и в виде различных библиотек в браузерах. CommonJS и Require.js например. Я предпочитаю второе.
нормальное ООП
Странно ждать "нормального" ООП в функциональном ЯП. Это просто другая парадигма. Однако же с помощью прототипного наследования можно добиться вполне привычного ООП.
исключения
Есть.
поддержка строго синтаксиса
Не совсем понимаю что такое строгий синтаксис. Строгая типизация? Не думаю что это прямо критично в 21 веке. Масса серьезнейших приложений пишется на JS, PHP, Ruby, Python и прочих и ничего, все работает.
Посмотрим, как пойдет ES 6.
Судя по всему для любителей C++-подобных языков там будет только дополнительный синтаксический сахар, в остальном язык остается верен своим концепциям.
Вызвал функцию с 1 параметром, вместо 2-х? — Fatal error
Вызвал функцию с 2 параметрами, вместо 1? — Fatal error
Используешь переменную, которую не объявил и которой нет в global scope — fatal error
И прочее.
Из минусов языка для меня
Callback hell. Ну, это конечно уже нельзя отнести к прямо языку, это скорее один из стилей написания на js кода, на том же jquery. Но с этим тесно связан "WTF in 'this'?", ну или bind hell. Столкнулся с этим, почитал доку, логики не увидел никакой, желания изучать js дальше не почувствовал.
Еще лично у меня есть бзик на сторонние библиотеки. Если чего-то нет из коробки — это плохо. Я не сторонник запилить в простой проект 20 зависимостей, а потом пытаться понять, кому из них досталась переменная $. Плюс трафик. Хотя, из этой особенности получается отличная игра для компании программистов.
Придумываете слово, добавляете к нему .js. Ищите в гугле. Если такая библиотека есть — вы выпиваете.
Но, судя по всему, для моей дальнейшей карьеры без js никуда. Поэтому рано или поздно придется его учить чуть дальше, чем "поиграться с ajax".