跳到主要內容

CreateJS系列教學-第二篇 樂透轉轉機

大家好,我是奶綠茶
熟悉了 Adobe Flash CC2014 匯出成 html5 CreateJS 教學後
接著我們再來練習把 JS 的程式碼寫成 Flash CC2014 裡
直接匯出成 html5 格式,製作速度之快,是其他軟體比不上的呀。
請到老師的好友, Titan 老師, 把之前製作過的 Flash 樂透轉轉機
轉成 html5 格式,讓桌機和手機同時支援

用 Flash CC2014 開啟之前製作好的 fla 檔
原本是 AS 文件,要轉存成 html5 文件
選擇上方工具列:命令 / 從 AS3 文件格式轉換為 HTML5 Canvas


存好新檔後,可以看到屬性面試顯示為 HTML5 Canvas 文件
此時在時間軸寫的程式碼是 JS 而不是 AS 喔


在這個範列下,需要再增加二段 JS 程式碼
1. 在影格 1 加入點擊後開始播放
this.stop();
// 方法1,  用 on 的方法偵聽事件
this.on("click",function(){
// 用 on 的方法,此時 this 指向會是自己
console.log("on",this);
this.gotoAndPlay(1);

});


// 方法2,用 addEventListener 方法偵聽事件
this.addEventListener("click",function(){
// 用 addEventLister 方法, this 指向會指到 Window
console.log( "addEventListener",this );

});



二者的差別在 this 的 scope 指向,奶老師個人編好使用 on 的方法來偵聽
因為只要打二個字(整個就是懶)。
提醒一下,在本機開發時 Chrome 會檔掉 click 事件,跳出這樣的訊件
Uncaught An error has occurred. This is most likely due to security restrictions on reading canvas pixel data with local or cross-domain images.
因為我們引用的 js 是來自 code.createjs.com 。
決解辦法就是丟到網路上即可,或是改用 Firefox 即可本機開發。


2. 轉轉機的結果
我們把要顯示的文字元件放在 txt_mc 元件裡,該元件放了三個影格。
只要加上亂數跳到指定的影格即可
var frame = Math.floor( Math.random() * 2 + 0.5);
this.txt_mc.gotoAndStop(frame);
this.play();
HTML5 文件下,影格是從 0 開始喔。



製作動畫的方式就和以往一樣,沒有任何改變,不需要再另外重新學習
有些小地方還是要提醒一下,並不是所有的功能都支援轉換
1. 本來在 AS 格式寫的程式碼,轉換為 HTML5 格式後,會自動被注解
FlashCC2014 只轉換動畫部份,程式還是需要重寫為 JS 格式。
2. 不支援 Filter 和混色模式。


3.顏色效果只支援 Alpha 。


4. 時間軸影格是從 0 開始(AS格式是從 1 開始)
EaselJS 中的影格編號從 0 開始,而非 1。例如,這會影響 gotoAndStop 和 gotoAndPlay 呼叫。

線上Demo
http://www.milkmidi.com/demo/201504_flashcc_createjs_part2/

祝大家學習愉快。
完整的 Source 下載
https://github.com/milkmidi/createjs_tutorial/tree/master/02_capsuleToy

轉載請註明出處

留言

這個網誌中的熱門文章

webpack2 入門實戰 1

大家好,我是奶綠茶
前端戰場不再只是寫寫 js / css , 各種框架、前處理工具百花齊放
身為前端工程師,不只要把程式寫完,還要寫好
老師說:選對好工具,事情就完成一半
如果你還在一隻 JS 打完全部程式,一隻 css 寫所有的 style
每次存檔還在手動 reload 網頁, 圖片壓 K 壓到不要不要的
透過奶綠伯的系列教學,讓你了解 webpack2 帶來的優勢
學會 webpack 可能不會加薪,但至少可以準時下班(誤)
1. 安裝 nodejs
請參考 gulp 安裝編

2. 安裝 global webpack , 筆者使用的是 2.2.1 版本
npm i webpack@2.2.1 -g
3. 在專案的根目錄放一隻 webpack.config.js
entry:你的主 js 進入點
output.filename:webpack 打包後的檔名
output.path:webpack 打包後的路徑
var path = require('path'); module.exports = { entry: './src/app.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } };
4. require , module.exports
現在前端都 module 化
可以每個獨立的功能都寫成單一的 js module
除了好管理,也方便讓團隊使用
寫一隻 module_exports_util.js
每隻經過 webpack 打包的 js , 都會是獨立的檔案
所以變數都是私有的, 外部成員都無法得到
在這個 module 裡,我們想開放二個函式
add , getName
所以在最後的 module.exports 指定
筆記加入 jsdoc , 為了方便在開發時,能夠有型別的提示

var name = "milkmidi"; /** * @param {number} num1 * @param {number} num2 * @return {number} */ function ad…

webpack2 入門實戰 3 scss,html,file-loader

大家好,我是奶綠茶
上一篇介紹了 webpack 的核心功能 loader
這篇再來補強各種常用的 loader
css-loader:解悉 css 檔
extract-loader:這個有點難翻,下面會介紹
file-loader:存成實體的檔案, 如圖片
html-loader:解悉 html 檔
sass-loader:解悉 scss 檔
url-loader:解悉圖片路徑
webpack.config.js
module.exports = { resolveLoader: { // 所有用到的 loader, -loader 可以不用打 moduleExtensions: [ "-loader" ], }, resolve: { // 在 require 檔案, 如果不想寫完整的路徑 // 可以加入這些目錄, 讓 webpack 自動尋找對的檔案 // 請注意我們加入了 src/img 路徑,後面會再介紹到 modules: [ path.resolve( 'src/html' ), path.resolve( 'src/img' ), path.resolve( 'src/css' ), path.resolve( 'src/js' ), path.resolve( "node_modules"), ], // 在 require 時可以不用打副檔名 extensions: [ ".js", ".scss" ] }, } 再來就是 loader 的介紹
scss
在這要做多組合的應用
先將 .scss 透過 scss-loader 轉換, 並產生 sourceMap 檔
再過 css-loader
最後再過 style-loader
{ test: /\.scss$/, // 多個 loader 組合, 可寫成一行,或…

gulp 前端自動化 - spritesheet

大家好,我是奶綠茶
今天來介紹如何使用 gulp 來自動化將圖片拼成 spritesheet
奶綠我使用的套件是 gulp.spritesmith
https://www.npmjs.com/package/gulp.spritesmith
可以使用 handlebars 格式,拼出自己想要的 css 格式
{{#sprites}} .{{name}} { background-position: {{px.offset_x}} {{px.offset_y}}; width: {{px.width}}; height: {{px.height}}; background-image: url({{{escaped_image}}}); } {{/sprites}} gulp 的設定
gulp.task('sprite',()=>{ console.log('sprite'); const spriteData = gulp.src('src/sprite_src/*') .pipe(spritesmith({ imgName: '../img/sprite.png', cssName: '_sprite.css', padding: 4, imgOpts: { quality: 100 }, cssTemplate: 'src/css/handlebars/basic.handlebars', })); const imgStream = spriteData.img .pipe(buffer()) .pipe(gulp.dest('dist/img/')); const cssStream = spriteData.css .pipe(gulp.dest('src/css')); return merge(imgStream, cssStream); });…