摘要:文件可以包含模板和樣式塊,因此組件的所有必需代碼都可以存在于單個(gè)文件中。該方法將使用其顏色信息發(fā)布事件,畫布組件將偵聽(tīng)該顏色信息。包含任意顏色的像素名稱,是包含值的顏色字典對(duì)象。從中使用了來(lái)渲染。
原文出處:Quick Introduction to Vue.js?—?Super Mario Pixel Art
::代碼我已經(jīng)歸納在github上:【vue2-pixel-art】::
::__查看【Demo】__::
最近有人問(wèn)我為什么選擇使用Vue.js來(lái)實(shí)現(xiàn)我們公司的第一款產(chǎn)品。哈哈哈,并不是每個(gè)人都有機(jī)會(huì)去探索Vue.js的;使用在這里,我先可以通過(guò)寫一個(gè)簡(jiǎn)簡(jiǎn)單單的Vue.js例子來(lái)快速介紹它,將讓大家對(duì)Vue.js有著很好認(rèn)識(shí)和了解,希望這些能給大家有所幫助。
繪制圖形可能不是Vue.js最受歡迎的用例,甚至很多市場(chǎng)上的Demo都很少有關(guān)繪制圖形的;但在這篇文章中,我想用繪制圖形來(lái)舉一個(gè)例子,我想其他人已經(jīng)在github上發(fā)現(xiàn)這個(gè)非常樂(lè)趣并好玩的動(dòng)sai -- 超級(jí)馬里奧像素藝術(shù)(靈感來(lái)自GithubData-Pixels),它繪制許多像素,當(dāng)點(diǎn)擊其中一個(gè)像素時(shí),周邊相似的都會(huì)隨之而改變。
哦,我們這里不是使用canvas來(lái)說(shuō)實(shí)現(xiàn)的,是使用了div。
在這里我使用了Vue.js來(lái)改寫,用Vue.js的方法來(lái)繪制和更新顏色,感覺(jué)超級(jí)棒棒的。
構(gòu)建兩個(gè)Vue組件在開(kāi)始編寫代碼之前,我就構(gòu)建了兩個(gè)Vue組件來(lái)實(shí)現(xiàn)這個(gè)圖形:
pixel.vue
pixel.vue是一個(gè)組件(這里放著每個(gè)小小像素單位);參數(shù)有color(RGB值)和size(像素大小)的兩個(gè)數(shù)據(jù),當(dāng)它被點(diǎn)擊并觸發(fā)事件,就是通知其父組件并也將會(huì)觸發(fā)一個(gè)事件。
canvas.vue
是一個(gè)基于具有每個(gè)像素的顏色的二維數(shù)組初始化像素分量的容器。
.vue 文件可以包含template模板、JavaScript和CSS樣式塊,因此組件的所有必需代碼都可以存在于單個(gè)文件中。
在script標(biāo)簽中,color(background color)和size(pixel size)是組件初始化時(shí)傳遞的必需屬性(props)。
如果沒(méi)有必要指定type,并required不在props有要求,那它可以簡(jiǎn)化為props: ["color", "size"]。屬性的值應(yīng)用于pixelStyle()計(jì)算的屬性,該屬性綁定到div.style。
如果color屬性值更改,它將通過(guò)計(jì)算屬性傳播到模板,并且div.l-pixel將更新背景。v-bind:(完整語(yǔ)法)或 :(簡(jiǎn)寫)用于綁定模板中的屬性或數(shù)據(jù)。傳播是:
color change in canvas.vue >>> "color" in "props" in pixel.vue >>> "pixelStyle()" in "computed" >>> style attribute of "div.l-pixel" in ""
v-on:(完整語(yǔ)法)或@(簡(jiǎn)寫)用于綁定事件處理程序,并且click方法中div.l-pixel綁定的click事件onPixelClick。
該方法將pixel-click使用其顏色信息發(fā)布事件,畫布組件將偵聽(tīng)該顏色信息。
main.jsimport Vue from "vue"; import NCanvas from "canvas"; new Vue({ components: {NCanvas}, el: "#main-canvas", template: "", data() { return { pixelData: null, colors: null } }, created() { const C = "C"; //Hat & Shirt const B = "B"; //Brown Hair & Boots const S = "S"; //Skin Tone const O = "O"; //Blue Overalls const Y = "Y"; //Yellow Buckles const W = "W"; //White Gloves const _ = "_"; this.pixelData = [ [_, _, _, _, _, _, _, _, _, _, _, _, _, _], [_, _, _, _, C, C, C, C, C, _, _, _, _, _], [_, _, _, C, C, C, C, C, C, C, C, C, _, _], [_, _, _, B, B, B, S, S, B, S, _, _, _, _], [_, _, B, S, B, S, S, S, B, S, S, S, _, _], [_, _, B, S, B, B, S, S, S, B, S, S, B, _], [_, _, B, B, S, S, S, S, B, B, B, B, _, _], [_, _, _, _, S, S, S, S, S, S, S, _, _, _], [_, _, _, C, C, O, C, C, C, C, _, _, _, _], [_, _, C, C, C, O, C, C, O, C, C, C, _, _], [_, C, C, C, C, O, O, O, O, C, C, C, C, _], [_, W, W, C, O, Y, O, O, Y, O, C, W, W, _], [_, W, W, W, O, O, O, O, O, O, W, W, W, _], [_, W, W, O, O, O, O, O, O, O, O, W, W, _], [_, _, _, O, O, O, _, _, O, O, O, _, _, _], [_, _, B, B, B, _, _, _, _, B, B, B, _, _], [_, B, B, B, B, _, _, _, _, B, B, B, B, _]]; this.colors = { [C]: "255, 0, 0", [B]: "100, 50, 0", [S]: "255, 200, 150", [O]: "0, 0, 255", [Y]: "255, 255, 0", [W]: "255, 255, 255", [_]: "229, 230, 232"}; } });
像素初始化的代碼寫在canvas.vue組件里,在這里,我們可以看到為canvas.vue屬性提供的數(shù)據(jù)。this.pixelData包含任意顏色的像素名稱,this.colors是包含RGB值的顏色字典(JavaScript對(duì)象)。(可以通過(guò)創(chuàng)建class Color,包含顏色名稱和RGB信息來(lái)修改)。
canvas.vue從main.js中使用了v-for來(lái)渲染pixelData。
pixel注冊(cè)的組件component: { NPixel },等同于components: {"n-pixel": NPixel} ,并且前綴n-用于防止組件名稱沖突,以防萬(wàn)一pixel已經(jīng)注冊(cè)為全局組件。
在n-pixel中的v-for,col是顏色名稱(即,“C”,“_”),其是來(lái)自main.js和 :color="colors[col]"發(fā)送一個(gè)RGB值(即“255,255,255”),以一個(gè)pixel組件。colIndex是當(dāng)前項(xiàng)目(0,1,2,...)的索引。它被傳遞給key屬性,Vue.js需要一個(gè)唯一的值v-for 。
@pixel-click="onPixelClick"pixel-click從pixel組件偵聽(tīng)事件并onPixelClick更改字典中的顏色(JavaScript對(duì)象,this.colors 而不是遍歷整個(gè)二維數(shù)組this.pixelData ,并通過(guò)反應(yīng)性,像素的背景顏色更新!
后續(xù)如果您想進(jìn)一步探索Vue.js,我建議您繼續(xù)閱讀他們的文章,甚至可以去看官方api并且自己動(dòng)手寫更多東西。還有一個(gè)很不錯(cuò)的免費(fèi)系列視頻 - []()學(xué)習(xí)拉拉斯卡特的?Learn Vue 2: Step By Step(Vue 2:一步一步)。
在我看來(lái),使用Vue.js來(lái)編寫一些小應(yīng)用程序來(lái)更好地了解庫(kù)或框架,這樣對(duì)你很有幫助的。您可以找到一個(gè)有趣的Demo或?qū)⒛郧暗拇a的一部分轉(zhuǎn)換為新的庫(kù)。在你提煉了自己的代碼之后,您會(huì)發(fā)現(xiàn)不同庫(kù)或框架轉(zhuǎn)換并非是件容易的事情,尤其對(duì)比了它們的優(yōu)點(diǎn)和缺點(diǎn)通常不是一下子就能理清楚的。
加油!!!!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/85232.html
摘要:從游戲界的角度來(lái)說(shuō)人工智能技術(shù)的發(fā)展可以為游戲帶來(lái)什么改變和收益。使用人工智能技術(shù)可以給游戲帶來(lái)更多更好的內(nèi)容,也可以減輕游戲開(kāi)發(fā)的成本。 作者:蘇博覽,騰訊互動(dòng)娛樂(lè)高級(jí)研究員商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系騰訊WeTest獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。原文鏈接:https://wetest.qq.com/lab/view/412.html 本文內(nèi)容包含以下章節(jié): Chapter 1.3 Why Ga...
摘要:基于時(shí)間的動(dòng)畫算法其實(shí)思路和實(shí)現(xiàn)都很簡(jiǎn)單。而基于時(shí)間的動(dòng)畫算法要注意邊緣時(shí)間的損失,最好采取積累時(shí)間,然后分固定片更新動(dòng)畫的方式。 作者:戴嘉華 轉(zhuǎn)載請(qǐng)注明出處,保留原文鏈接和作者信息 目錄 前言 基于幀的動(dòng)畫算法(Frame-based) 基于時(shí)間的動(dòng)畫算法(Time-based) 改良基于時(shí)間的動(dòng)畫算法 總結(jié) 前言 前段時(shí)間無(wú)聊或有聊地做了幾個(gè)移動(dòng)端的HTML5游戲。...
摘要:模塊安裝統(tǒng)一用的豆瓣鏡像源模塊名。圖片素材背景音樂(lè)字體可修改開(kāi)始敲代碼運(yùn)行程序。超級(jí)瑪麗源碼基地配置音樂(lè)文字等。 導(dǎo)語(yǔ)? 哈嘍!哈嘍!我是木木子?,今日游戲更新——超級(jí)瑪麗華麗上線?啦! 超級(jí)瑪麗有多少人還記得這款經(jīng)典游戲?對(duì)于90、00后應(yīng)該不大熟悉,但多多少少印象中見(jiàn)過(guò) 那個(gè)戴帽子的大胡...
閱讀 3220·2021-11-12 10:36
閱讀 1288·2019-08-30 15:56
閱讀 2449·2019-08-30 11:26
閱讀 559·2019-08-29 13:00
閱讀 3616·2019-08-28 18:08
閱讀 2755·2019-08-26 17:18
閱讀 1907·2019-08-26 13:26
閱讀 2438·2019-08-26 11:39