SlideShare a Scribd company logo
1 of 25
SWFバージョン4においての
テキスト形式による
コンパイル結果の違い及び
JavaScriptでの
その描画方法に関する考察



株式会社サイバーエージェント
アメーバ事業本部
ソーシャルゲームDiv エンジニアG

小坂 和弘
 @hyperdash
Summary.
・Swineにおけるテキスト描画方法の考察
・Flash Professionalで配置したテキストの
 設定によるコンパイル結果のパターン
・パターン別描画戦略
・実際に実装した方法 (SVG Font)
・JSLint
じゃ、いきます。
     が、
   レポート見てください。
詳細は
Swine?
・内製SWF to HTML5変換エンジン
・iOS (iPhone) がメインターゲット
・サーバサイド (Java) でSWFをJSON中間コードに変換
・JavaScript, HTML5 (Canvas) + CSS3で再生
・ActionScript 1.0 (Flash Lite 1.1) = SWFバージョン4 対応
・ブーシュカ (iPhone版) で導入済み
Milestones.
・DOM操作の削減
・描画の完全Canvas化 (高速化)
・Android対応 (?)
SWF Text.
・2パターンのコンパイル結果
・DefineText (+ DefineText2) タグ
  ・テキスト形式が静的テキスト
  ・フォントが埋め込みフォント
  ・アンチエイリアス設定が
   『デバイスフォントを使用』以外
  ・選択可能設定がオフ
・DefineEditText タグ
  ・さらに3パターンに分類する
   ・テキスト形式
   ・埋め込みフォント/デバイスフォント
   ・アンチエイリアス設定
パターン、いきます。
A

・デバイスフォント
 (端末にインストールされているフォントを使用)
・HTMLのテキストとしてレンダリングする
・CSSに反映
B

・埋め込みフォント
 (端末にインストールされていない・各Glyphのパス情報)
・CanvasでGlyphを描画
・レイアウト情報に従ってGlyphを配置
C

・パスワード入力
・アスタリスク以外のGlyphが不要
・埋め込みフォントもデバイスフォントで代替
D


・デバイスフォントと埋込みフォントが混在可能
・パターンAとパターンBを組み合わせる
・divでさらに1階層wrap
ここまでがレポートの内
           容でした。
      その後、
     実装してみた。
Implementations in Action.
・デバイスフォントの場合は問題なし
・埋め込みフォントの場合 (Canvas)
  ・全Glyphのパス描画が必要
  ・ColorTransform時にパスの再描画が必要
  ・レイアウトがムズい
そこで、SVGフォントですよ。
SVG Font?
・Webフォントが対応するフォーマットの一種
・SVGフォーマットでフォントを定義
・Androidのブラウザでも利用可能
・ブラウザによって実装にバグが…
 (missing-glyphの扱い etc)
・W3Cの仕様にブラウザが追いついていない
 (pathエレメントでGlyphパス定義ができない etc)
SVG Font.
・SWFに埋め込まれたフォントのパス情報を
 SVGフォントに変換
・BASE64エンコードして中間JSONに格納
・@font-faceのsrcにData URI Schemeで指定
 (StyleSheetにinsertRuleする)
・あとは通常のテキストとして描画
・著作権に留意が必要
じゃ、結果、いきます。
1



    Original SWF   Swine
2



    Original SWF   Swine
3



    Original SWF   Swine
うふふ、オッケー☆
ところで、
JSコーディングルールって

   どうしてますか?
JSLint?
・JSコーディングルールチェッカー
・by Douglas Crockford
・JSの書き方は人によって結構違う
・Swineチームで試験的に導入
・とはいえパフォーマンス優先
・いくつかルールから除外
・他にGoogle JS Style Guideも参考
情報交換&勉強会しましょう。
ありがとうございました。
20120420

More Related Content

What's hot

達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)masayoshi takahashi
 
LT#8 乗るしかないこのECMA Script 2015に
LT#8 乗るしかないこのECMA Script 2015にLT#8 乗るしかないこのECMA Script 2015に
LT#8 乗るしかないこのECMA Script 2015にdo7be
 
Sphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみたSphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみたStudy Group by SciencePark Corp.
 
Prism + ReactiveProperty入門
Prism + ReactiveProperty入門Prism + ReactiveProperty入門
Prism + ReactiveProperty入門一希 大田
 
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7Hiroshi Toda
 
Windows ストア アプリの上手な作り方
Windows ストア アプリの上手な作り方Windows ストア アプリの上手な作り方
Windows ストア アプリの上手な作り方一希 大田
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
angular1脳で見るangular2
angular1脳で見るangular2angular1脳で見るangular2
angular1脳で見るangular2Moriyuki Arakawa
 
AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話kumatch kumatch
 
Visual studio 2013 Overview
Visual studio 2013 OverviewVisual studio 2013 Overview
Visual studio 2013 Overview一希 大田
 
最近誰かに「やったほうがいいよ」と伝えた7のこと
最近誰かに「やったほうがいいよ」と伝えた7のこと最近誰かに「やったほうがいいよ」と伝えた7のこと
最近誰かに「やったほうがいいよ」と伝えた7のことNoriaki Kadota
 
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2kamukiriri
 
Team Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるTeam Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるYou&I
 
究極にして至高のWAF
究極にして至高のWAF究極にして至高のWAF
究極にして至高のWAFYuki Ishikawa
 
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9Hiroshi Toda
 
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話takehiko yoshida
 

What's hot (20)

達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)
 
LT#8 乗るしかないこのECMA Script 2015に
LT#8 乗るしかないこのECMA Script 2015にLT#8 乗るしかないこのECMA Script 2015に
LT#8 乗るしかないこのECMA Script 2015に
 
Sphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみたSphinxの環境構築が再現できない問題をDockerで解決してみた
Sphinxの環境構築が再現できない問題をDockerで解決してみた
 
Prism + ReactiveProperty入門
Prism + ReactiveProperty入門Prism + ReactiveProperty入門
Prism + ReactiveProperty入門
 
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
 
Windows ストア アプリの上手な作り方
Windows ストア アプリの上手な作り方Windows ストア アプリの上手な作り方
Windows ストア アプリの上手な作り方
 
Chrome 拡張のご紹介
Chrome 拡張のご紹介Chrome 拡張のご紹介
Chrome 拡張のご紹介
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
AngularJS 概説
AngularJS 概説AngularJS 概説
AngularJS 概説
 
angular1脳で見るangular2
angular1脳で見るangular2angular1脳で見るangular2
angular1脳で見るangular2
 
AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話
 
Visual studio 2013 Overview
Visual studio 2013 OverviewVisual studio 2013 Overview
Visual studio 2013 Overview
 
最近誰かに「やったほうがいいよ」と伝えた7のこと
最近誰かに「やったほうがいいよ」と伝えた7のこと最近誰かに「やったほうがいいよ」と伝えた7のこと
最近誰かに「やったほうがいいよ」と伝えた7のこと
 
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
 
Team Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるTeam Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみる
 
究極にして至高のWAF
究極にして至高のWAF究極にして至高のWAF
究極にして至高のWAF
 
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
 
Angular#Kanazawa
Angular#KanazawaAngular#Kanazawa
Angular#Kanazawa
 
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
 

Similar to SWFバージョン4においての テキスト形式による コンパイル結果の違い及び JavaScriptでの その描画方法に関する考察

SWFバージョン4においてのテキスト形式によるコンパイル結果の違い及びJavaScriptでのその描画方法に関する考察
SWFバージョン4においてのテキスト形式によるコンパイル結果の違い及びJavaScriptでのその描画方法に関する考察SWFバージョン4においてのテキスト形式によるコンパイル結果の違い及びJavaScriptでのその描画方法に関する考察
SWFバージョン4においてのテキスト形式によるコンパイル結果の違い及びJavaScriptでのその描画方法に関する考察Kazuhiro Kosaka
 
インタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashインタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashYasunobu Ikeda
 
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-jsKondo Hitoshi
 
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」Yasunobu Ikeda
 
【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!Yu Tanaka
 
【論文読み会】Signing at Scale: Learning to Co-Articulate Signs for Large-Scale Pho...
【論文読み会】Signing at Scale: Learning to Co-Articulate  Signs for Large-Scale Pho...【論文読み会】Signing at Scale: Learning to Co-Articulate  Signs for Large-Scale Pho...
【論文読み会】Signing at Scale: Learning to Co-Articulate Signs for Large-Scale Pho...ARISE analytics
 
CEDEC 2013 - FlashによるアセットワークフローのHTML5やネイティブアプリへのうまい持ち込み方
CEDEC 2013 - FlashによるアセットワークフローのHTML5やネイティブアプリへのうまい持ち込み方CEDEC 2013 - FlashによるアセットワークフローのHTML5やネイティブアプリへのうまい持ち込み方
CEDEC 2013 - FlashによるアセットワークフローのHTML5やネイティブアプリへのうまい持ち込み方Andy Hall
 
TypeTalks第10回「もっと知りたい!Webフォント」
TypeTalks第10回「もっと知りたい!Webフォント」TypeTalks第10回「もっと知りたい!Webフォント」
TypeTalks第10回「もっと知りたい!Webフォント」Kosuke Yamada
 
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」Takashi Endo
 
HTML5でできるカメラアプリを実際に体験しよう
HTML5でできるカメラアプリを実際に体験しよう HTML5でできるカメラアプリを実際に体験しよう
HTML5でできるカメラアプリを実際に体験しよう Hideki Akiba
 
Mochrom - スマートフォンビジネスサミット
Mochrom - スマートフォンビジネスサミットMochrom - スマートフォンビジネスサミット
Mochrom - スマートフォンビジネスサミットKatsuaki Sato
 
JavaScript使いならきっととっつきやすいNode-REDについて
JavaScript使いならきっととっつきやすいNode-REDについてJavaScript使いならきっととっつきやすいNode-REDについて
JavaScript使いならきっととっつきやすいNode-REDについてSeigo Tanaka
 
まめフラスコで遊ぼう
まめフラスコで遊ぼうまめフラスコで遊ぼう
まめフラスコで遊ぼうlibpanda
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験AdvancedTechNight
 
Heroku meetup#11(lt)
Heroku meetup#11(lt)Heroku meetup#11(lt)
Heroku meetup#11(lt)Hideki Ohkubo
 
LT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとかLT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとかKazuya Matsubara
 
Js frameworkの紹介
Js frameworkの紹介Js frameworkの紹介
Js frameworkの紹介Ryo Shimada
 
Firefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみたFirefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみたKohei Kadowaki
 

Similar to SWFバージョン4においての テキスト形式による コンパイル結果の違い及び JavaScriptでの その描画方法に関する考察 (20)

SWFバージョン4においてのテキスト形式によるコンパイル結果の違い及びJavaScriptでのその描画方法に関する考察
SWFバージョン4においてのテキスト形式によるコンパイル結果の違い及びJavaScriptでのその描画方法に関する考察SWFバージョン4においてのテキスト形式によるコンパイル結果の違い及びJavaScriptでのその描画方法に関する考察
SWFバージョン4においてのテキスト形式によるコンパイル結果の違い及びJavaScriptでのその描画方法に関する考察
 
インタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashインタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlash
 
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js
 
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
 
【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!
 
【論文読み会】Signing at Scale: Learning to Co-Articulate Signs for Large-Scale Pho...
【論文読み会】Signing at Scale: Learning to Co-Articulate  Signs for Large-Scale Pho...【論文読み会】Signing at Scale: Learning to Co-Articulate  Signs for Large-Scale Pho...
【論文読み会】Signing at Scale: Learning to Co-Articulate Signs for Large-Scale Pho...
 
CEDEC 2013 - FlashによるアセットワークフローのHTML5やネイティブアプリへのうまい持ち込み方
CEDEC 2013 - FlashによるアセットワークフローのHTML5やネイティブアプリへのうまい持ち込み方CEDEC 2013 - FlashによるアセットワークフローのHTML5やネイティブアプリへのうまい持ち込み方
CEDEC 2013 - FlashによるアセットワークフローのHTML5やネイティブアプリへのうまい持ち込み方
 
TypeTalks第10回「もっと知りたい!Webフォント」
TypeTalks第10回「もっと知りたい!Webフォント」TypeTalks第10回「もっと知りたい!Webフォント」
TypeTalks第10回「もっと知りたい!Webフォント」
 
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
 
Node canvas
Node canvasNode canvas
Node canvas
 
HTML5でできるカメラアプリを実際に体験しよう
HTML5でできるカメラアプリを実際に体験しよう HTML5でできるカメラアプリを実際に体験しよう
HTML5でできるカメラアプリを実際に体験しよう
 
Mochrom - スマートフォンビジネスサミット
Mochrom - スマートフォンビジネスサミットMochrom - スマートフォンビジネスサミット
Mochrom - スマートフォンビジネスサミット
 
JavaScript使いならきっととっつきやすいNode-REDについて
JavaScript使いならきっととっつきやすいNode-REDについてJavaScript使いならきっととっつきやすいNode-REDについて
JavaScript使いならきっととっつきやすいNode-REDについて
 
まめフラスコで遊ぼう
まめフラスコで遊ぼうまめフラスコで遊ぼう
まめフラスコで遊ぼう
 
Spring.project
Spring.projectSpring.project
Spring.project
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
Heroku meetup#11(lt)
Heroku meetup#11(lt)Heroku meetup#11(lt)
Heroku meetup#11(lt)
 
LT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとかLT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとか
 
Js frameworkの紹介
Js frameworkの紹介Js frameworkの紹介
Js frameworkの紹介
 
Firefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみたFirefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみた
 

SWFバージョン4においての テキスト形式による コンパイル結果の違い及び JavaScriptでの その描画方法に関する考察