Canvas小練習_祖瑪游戲01

来源:http://www.cnblogs.com/tsinjava/archive/2017/12/05/7987365.html
-Advertisement-
Play Games

這幾天學習了一個祖瑪游戲的小Demo,記錄下這個小游戲的編寫過程。 1:首先實現的一個簡單界面效果。 2:在圖形繪製完成後,讓黑色小球沿著圓形弧線運動。 編碼過程 創建畫布,繪製圓形弧線。 首先在Html頁面上定義一個Canvas標簽。 在JS代碼中,實現Canvas繪圖功能。 1:繪製弧形圖。 2 ...


這幾天學習了一個祖瑪游戲的小Demo,記錄下這個小游戲的編寫過程。

   1:首先實現的一個簡單界面效果。

   

 2:在圖形繪製完成後,讓黑色小球沿著圓形弧線運動。

      編碼過程

      創建畫布,繪製圓形弧線。

      首先在Html頁面上定義一個Canvas標簽。

<div style="width: 600px;height: 600px;background-color: white; margin: 20px auto;"> 
<!--在畫布上創建一個Canvas-->
<canvas id="context" width="600" height="600" ></canvas>
</div>	

 在JS代碼中,實現Canvas繪圖功能。 

  1:繪製弧形圖。

            gc.beginPath();
            //調用繪圖的 arc(x,y,r,start,stop,counterclockwise) 方法創建一個園
            //其中x,y是圓心坐標,r是半徑,start是開始弧度,
            //stop是結束弧度,counterclockwise false順時鐘  true逆時鐘 預設位順時鐘。
            //三點鐘是0弧度 ,12點是1.5弧度。
            gc.arc(300,200,200,1.5*Math.PI,1*Math.PI,false);
            //stroke()和fill()的區別在於,fill()是填充繪製圖形
            gc.stroke();
            gc.closePath();
            gc.beginPath();
            //繪製在180度的時候,大圓變成小圓。將圓心移動(250,200)處。
            gc.arc(250,200,150,1.*Math.PI,2*Math.PI,false);
            gc.stroke();
            gc.closePath();
            gc.beginPath();
            //繪製結束處的小圓,半徑為20.
            gc.arc(400,200,20,0*Math.PI,2*Math.PI);
            gc.stroke();
            gc.closePath();

  2:創建一個動起來的小球。由於後面的目標小球會有多個,需定義一個數組。

                    var ball=[];
		    ball[0]={
		     x:300,//繪製小球的中心點x坐標
		     y:0,//繪製小球的中心點y坐標
		     r:200,//繪製小球的半徑
		     angle:0,//小球從0度開始轉過的角度
		     firstx:300,//小球的起始點x坐標
		     firsty:200 //小球的起始點y坐標
		    };

 3:讓創建的小球動起來。創建的小球動起來,通過改變小球的圓心坐標,重新繪製這個小球。

      改變小球的圓心坐標,通過角度計算相加得到

 //創建一個定時器,每隔30秒改變小球的圓心點坐標
             setInterval(function(){
                 for(var i=0;i<ball.length;i++){
                     ball[i].angle++;
                      //新的小球x坐標等於,等於原始起點x坐標加上小球轉過的角度後的x軸的分量。
                     ball[i].x=ball[i].firstx+Math.sin(ball[i].angle*Math.PI/180)*ball[i].r;
                      //新的小球y坐標等於,等於原始起點y坐標減去小球轉過的角度後的y軸的分量。
                     ball[i].y=ball[i].firsty-Math.cos(ball[i].angle*Math.PI/180)*ball[i].r;
                     }
                 },30);
                }

 4:動態能夠改變小球的圓心點坐標後,把小球加入到畫布,小球動起來。

      小球能夠動起來,實際上通過每隔多少秒,重新清理下畫布,在重新繪製該畫布,達到實現動態的效果。

       調用:clearRect(x,y,width,height)方法,清理從(x,y)處開始的坐標的長度的畫布。

 //清理畫布
gc.clearRect(0,0,context.width,context.height);
//加入小球
for(var i=0;i<ball.length;i++){ gc.beginPath(); gc.moveTo(ball[i].x,ball[i].y); //繪製目標小球 gc.arc(ball[i].x,ball[i].y,20,0*Math.PI,2*Math.PI); gc.fillStyle="black"; gc.fill(); gc.closePath(); }

 5:關於弧度和角度的換算問題。

     canvas中大多數函數,以弧度計算 需將角度轉換弧度,角度轉換弧度只需將角度乘以 0.017453293 (2PI/360)即可轉換為弧度。

     即Math.PI/180。

                                                                                                                                                                                                                                                                                                                                                                                                          未完待續。

 

        

     

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫在前面: 最近公司在做微信公眾號的開發,我的任務是在微信服務號中嵌套第三方頁面,也就是公司自己負責的頁面,技術我選的是vue,應為在之前的開發經歷中並沒有使用過vue,這也是一次新的嘗試,當然在開發過程中會遇到一系列之前沒有遇到的問題,不過這不是重點,只要有解決問題的那一刻就非常心滿意足了。 因為 ...
  • 對於本圖來說用了一個效果就能達到這種情況,對於我來說,今天是有進步的,具體操作就是盒子模型確實,在什麼地方起來的flex就運用到該地方去,剛 開始就一直有問題,思考了半天,原來是我的控制代碼出現了點錯誤,就是不將對應的控制放到了想盒子裡面,而放在子元素下麵,果然不會的地方是在於 多多嘗試,嘗試多了, ...
  • function getDate(){ var myDate = new Date(); //獲取當前年 var year = myDate.getFullYear(); //獲取當前月 var month = myDate.getMonth() + 1; //獲取當前日 var date = my ...
  • 移動端開發 我們現在關註的點還在移動M站上,或者我們可以叫做webapp,其實就是運行在移動端瀏覽器中的web網站 app:application應用程式。手機軟體:主要指安裝在智能手機上的軟體,完善原始系統的不足與個性化。 移動端開發是與PC端肯定是有很大不同的,所以我們需要學習如何在移動設備上開 ...
  • Mint-UI Picker組件的三級聯動 HTML: JS: ...
  • null在JavaScript中是關鍵字,它屬於一個特殊的值,即空值。 而undefined它不是關鍵字,它表示未定義,屬於預定義的全局變數。 null == undefined 返回的是 true 可以認為兩著是相等的,均表示空。 null undefined 返回的是false 這個比較的比僅僅 ...
  • 1、導入Vuex 2、定義store 3、將store註入 4、store狀態更改 5、子組件中獲取狀態 使用mapState ...
  • 從點擊屏幕上的元素到觸發元素的 click 事件,移動瀏覽器會有大約 300 毫秒的等待時間 fastclick清除點擊延遲,讓程式更靈敏 1、導入fastclick 2、 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...