999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于cocos2d-android的“植物大戰僵尸”游戲研發

2018-09-14 08:06:08袁飄逸
軟件 2018年8期
關鍵詞:引擎界面植物

袁飄逸

?

基于cocos2d-android的“植物大戰僵尸”游戲研發

袁飄逸

(云南師范大學 信息學院,云南 昆明 650000)

本文介紹了一款2D游戲軟件的研發過程。手機游戲利用cocos2d-android提供的場景、層、精靈和聲音引擎,游戲地圖繪圖結合Tiled制圖工具,快捷實現了游戲的開發與平臺部署。詳細闡述了該游戲的設計過程與游戲模塊功能的實現過程,為使用cocos2d-android迅速高效地實現開發者的游戲提供了一種思路。該游戲的重點在于對cocos2d-android這個游戲引擎的使用,以及游戲中點擊事件處理機制。

cocos2d-android;游戲引擎;地圖繪制;碰撞檢測

0 引言

目前,隨著手游市場的不斷擴大,各型各態的手游APP應運而生,隨之涌現大量的開發工具和開發方法。如今游戲領域發展到了具有很強大的界面交互性、娛樂性、商業化的復雜游戲形態,但游戲要達到此效果,如果從頭編寫代碼,不依靠游戲引擎的使用,平均開發一款游戲的周期至少8個月以上,使用游戲引擎開發游戲能夠縮短一半的開發周期,還能節約開發成本和降低軟件風險。

本文介紹的是在Android平臺下使用cocos2d- android游戲引擎技術開發一款2D游戲,即把 cocos2d-android架構包移植到Android開發平臺上進行此游戲的研發與實現。

在開發過程中借鑒了“QQ農場”與“植物大戰僵尸”這兩款游戲的相關圖片以及聲音資源,僅為個人研發過程中使用,不作為商業用途。

1 Cocos2d_android游戲引擎介紹

Cocos2d是一個包含很多成員的大家族,其中含有Cocos2d-X、Cocos2d-iPhone、Cocos2d-JS等。然而,Cocos2d-X在中國處于世界領先水平。不同的Cocos2d版本之間的區別只是程序語言不同,但是實現的邏輯都相同。對于Cocos2d_Android只要關注以下四個部分:CCDirector(導演)、CCScene(場景)、CCLayer(圖層)、CCSprite(精靈)。

2 總體設計

游戲的設計運用了cocos2d-android的CCGL-SurfaceView的主體功能實現,先建立一個場景,再在場景上添加圖層,隨后在圖層上添加精靈,最后由導演(CCDirector)指揮、運行。

本游戲事先會準備很多圖片(精靈),植物坐標以二維數組的存儲方式保存在特定集合中,僵尸坐標也保存于特定集合中,當游戲開始時,僵尸會從保存的坐標點中隨機產生出來;而植物的產生則由玩家安放。游戲的主體界面上有類似的植物安放位置地圖,是以屏幕位置劃分的,用戶只要單擊了植物,再點擊屏幕的設置范圍、即可做出相應的響應。

由于cocos2d-android游戲的特殊性,不能使用Android源生的默認界面,所以游戲地圖主界面采用Tiled工具制作特殊地圖的方式實現,游戲主要包括3個界面,游戲開始界面、游戲選擇界面、游戲主體界面。游戲的界面流程圖如圖1所示。所有非游戲界面采用了貼圖或者菜單選項等顯示機制,并對這些貼圖或者菜單設有按鈕點擊事件,當用戶點擊時,會有相應的提示。游戲主體界面是游戲設計中游戲對象最多,需要處理的游戲線程處理最復雜的界面[1]。

3 業務邏輯的實現

3.1 游戲基本框架搭建

3.1.1 MENU(菜單)界面類

MENU(菜單)游戲菜單按鈕,首先使用CCSprite來初始化兩張背景圖片,一張是正常顯示的圖片,另一張是點擊按鈕按下去時的圖片;初始化菜單是使用CCMenu初始化的,其調用方式是用onClick( )方法來檢測菜單按鈕的狀態(菜單按鈕是否被選中),當被用戶點擊改菜單按鈕時,屏幕上會顯示按下去時的圖片,程序會調onSelect( )方法,這個方法中會有相應的點擊事件處理。

圖1 界面設計流程圖

3.1.2 游戲主界面類

游戲進入主界面是調用CCTMXTiledMap的tiledMap方法來加載Tiled地圖制作軟件制作的地圖,在加載地圖的同時,檢查存儲植物的集合是否為空,如果為空需轉至商店圖層購買植物,否則直接進入游戲;加載完地圖以后,再加載植物和僵尸的坐標點,這些坐標點存儲在特定的集合中;后續使用Random()方法隨機產生僵尸,使用一個cocos2d的定時器,即CCScheduler的scheduler方法,定時產生僵尸;左上方有供用戶操作的特殊工具,比如商店,倉庫等;右上方有返回按鈕。中上方位置是在商店購買的植物,不過這里只能顯示5種植物,即可安放的植物,在其下方就是戰斗位置、僵尸產生和植物安放的位置。

當提示安放植物時,一段延時以后,定時器會產生僵尸,隨后用戶可以種植植物,在這里為了方便判斷與減少未知的bug,用到了一個FightLine類(戰線類),該類的作用就是存儲某一條線上的植物對象和僵尸對象,用以處理游戲中碰撞的實現。如果僵尸遇到植物,則可攻擊;如果某一條線上有僵尸并且有可攻擊的植物時,則植物攻擊僵尸;如果該位置上有植物則不可安放其他植物。

3.1.3 地圖制作

一般cocos2d-android的地圖制作工具是Tiled地圖制作軟件,本游戲中使用到的功能有插入對象和插入對象層。主要目的是用于加載小僵尸的坐標點和植物種植的坐標點。

3.1.4 植物選擇框植物顯示位置的計算

游戲中用到的植物選擇框有3行4列,首先要確定某一個植物屬于哪一行哪一列;我們這樣計算:假設R(1<=R<=12)植物屬于第i行第j列,不妨設左上角的那個框為第0行第0列,在該位置的植物為1,如圖2所示。

圖2 植物選擇框

則:從0開始計數,

第1個植物,屬于0行0列,即:行:(1-1)/4列:(1-1)%4;

第2個植物,屬于0行1列,即:行:(2-1)/4列:(2-1)%4;

第3個植物,屬于0行2列,即:行:(3-1)/4列:(3-1)%4;

……

……

第12個植物,屬于2行3列,即:行:(12-1)/4列:(12-1)%4;

綜上;第R個植物,屬于i=(R-1)/4行、j=(R-1) %4列。

由于要在屏幕上顯示植物,故需知道其顯示的坐標;對于cocos2d游戲引擎,這里統一的設置其錨點為(0,0),因為游戲里植物圖片寬度為54像素,高度為59像素,每個框之間的距離為16像素,植物框的高度為175像素,所以某個植物的顯示位置如下:

=(R-1)%4*54+16;

=175-(R-1)/4*59;

隨后調用該植物的setPosition(x, y)方法即可在屏幕顯示,如圖3所示。

圖3 選擇框植物展示

3.1.5 植物可種植區域的計算

可種植區域就是戰斗的位置(包括植物和僵尸),游戲中的戰斗位置有3行4列,但屏幕總的有6行10列,首先要知道用戶點擊了哪行那列,由于每一行和每一列中每個格子的寬度為46像素,高度為53像素,不妨設用戶點擊的坐標為(x, y),對應的行為line、列為column,屏幕的高度為h,則:

行:line=/46;

列:column=(h-)/53;(cocos2d坐標體系原點為左下角)

從左往右、從上到下數起,可種植區域屬于從弟3行第6列開始至第5行第9列結束,如圖4 所示。

圖4 游戲地圖及植物種植區域

故可種植的行和列的范圍為:

行:line≥2 and line≤4;

列:column≥5 and column≤8;

即:當用戶點擊了的點在line和column范圍內,直接調用植物的setPosition(line, column)方法即可實現植物的種植。

3.2 單項功能的實現

3.2.1 可種植區域判斷

當用戶點擊了植物,再點擊屏幕其他位置時,先獲取到用戶點擊的位置坐標,如果用戶點擊的位置與可種植區域坐標相符時,并且該位置沒有其他植物時,方可種植植物,然后把所點擊植物的坐標設為所點擊的坐標。

3.2.2 植物種植過程的實現

首先,采用一個二維數組保存植物種植的坐標點,隨后在用一個類(戰線類)保存某一條線上的植物和僵尸,在生成戰斗頁面類時就初始化戰線類,如果有多條戰線,需循環初始化;該戰線類里面存有戰斗邏輯的相關方法,其中有個方法就是判斷該戰線中是否種植了植物,如果有則種植不成功,否則種植成功;當用戶點擊植物時,植物先變為半透明狀態,如果用戶種植了植物,隨后被點擊的植物恢復初始狀態,或者點擊其他植物也可以恢復初始狀態。在種植植物的過程中,程序會把種植了的植物對象和隨機產生的僵尸的對象添加到戰線類中,用于處理戰斗的碰撞過程。

3.2.3 太陽花的種植及生產陽光實現

首先,建了特定的基類,太陽花類繼承自生產植物基類,都有些特殊屬性,比如特殊的動畫;當安放了太陽花以后,會產生一個定時器,該定時器會定時的產生太陽花,太陽花產生的位置跟種植的太陽花有關,一般偏幅在10個像素左右;太陽花有其生命周期,當移動到收集的位置時,陽光值加加,然后陽光自身銷毀。其次,種植植物太陽花時,做了很多判斷,比如,是否落在了地圖可種植區域、該地圖位置是否已經種植了植物等。最后,如果太陽花被僵尸吃了,則會停止產生陽光的定時器來停止生產陽光同時太陽花植物本身銷毀。

3.2.4 豌豆射手種植及產生豌豆實現

豌豆射手和豌豆都繼承自植物基類,都有其特殊屬性,豌豆有其移動的屬性,從種植豌豆射手的位置,移動到某個位置,如果中途有僵尸則攻擊,否則不產生。豌豆也設有定時器,監測該位置的這條線上是否有僵尸,如果有則產生豌豆。豌豆射手種植和太陽花差不多,都是判斷是否落在可種植區域并且該位置沒有種植植物即可安放。

3.2.5 生成僵尸的實現

僵尸不同于植物,僵尸的產生需要幾個參數,移動的起始位置以及終點位置,以及移動過程中的不同動畫的播放。對于僵尸的基類,有些抽象方法可實現,比如是否被攻擊、是否攻擊植物、運動過程中播放的動畫等。僵尸的產生是隨機的,調用了Random()方法生成了幾個隨機數,用于讀取地圖的僵尸起點坐標點,然后在相應的某條線上產生僵尸。

3.2.6 游戲彈窗的實現

在實現游戲彈窗的時候,采用以下方式:首先,暫停當前圖層,調用當前圖層的父類,添加一個新的圖層,這個新的圖層就是彈窗。這個新的圖層也有點擊事件的操作,比如,結束這個新的圖層、繼續當前圖層。或者結束所有圖層。

4 結語

在整個實現過程中,對游戲一些靜態常量的使用不熟,比如在使用完靜態常量以后,若不把靜態常量重置的話會出現未知的bug;還有就是對游 戲圖層的理解不熟悉,導致把精靈添加到圖層上沒有實現自己想要的結果;最后就是對點擊事件的處理機制理解不透徹,導致做彈窗圖層時導致程序崩潰。

[1] 蔣皓. 基于Android的游戲設計與開發[D]. 東南大學, 2011.

[2] 彭守鎮, 詹發榮. 基于Cocos2d-android的手機游戲開發[J]. 電腦知識與技術, 2014, 10(20): 4827-4828.

[3] 李婧. 基于Android平臺的手機游戲設計與實現[D]. 東南大學, 2017.

[4] 謝海軍. 基于JAVA的手機游戲引擎的研究及實現[D]. 西南交通大學, 2007.

[5] 陳法林, 許波. 基于SDL & Box2D的Android游戲引擎的設計與實現[J]. 現代計算機(專業版), 2018(12): 67-71.

[6] 黎忠文, 覃志東, 王全宇, 倪仲余. 基于Android平臺手機游戲引擎的設計與實現[J]. 計算機工程與設計, 2014, 35(01): 119-124.

[7] 李愛軍. 基于Cocos2d的迷宮游戲的設計與實現[J]. 辦公自動化, 2016, 21(13): 45-47+26.

[8] 孫紅麗, 葉斌. 基于Android的通訊錄系統的設計與實現[J]. 軟件, 2015, 36(5): 117-120.

[9] 汪文彬, 楊少輝. 基于短信控制的Android手機安全系統的設計與實現[J]. 軟件, 2015, 36(6): 21-25.

[10] 王志國, 楊維. 基于Android 平臺酒店人員定位系統的設計與實現[J]. 軟件, 2015, 36(10): 65-67.

The Development of "Plant vs Zombies" Game Based on Cocos2d-android

YUAN Piao-yi

(School of Information Science and Technology, Yunnan Normal University, Kunming 650000)

This article describes the development process of a 2D game software. Mobile games use scenes, layers, sprites, and sound engines provided by cocos2d-android, game maps, and Tiled mapping tools to quickly implement game development and platform deployment. The process of designing the game and the realization of the module function of the game are described in detail, which provides a way of thinking for using the cocos2d-android to quickly and efficiently implement the developer's game. The game's focus is on the use of the cocos2d-android game engine, as well as the click event handling mechanism in the game.

Cocos2d-android; Game engine; Map drawing; Collision detection

TP311.52

A

10.3969/j.issn.1003-6970.2018.08.035

袁飄逸(1996-),女,研究生,主要研究方向:安卓游戲引擎。

本文著錄格式:袁飄逸. 基于cocos2d-android的“植物大戰僵尸”游戲研發[J]. 軟件,2018,39(8):174-177

猜你喜歡
引擎界面植物
國企黨委前置研究的“四個界面”
當代陜西(2020年13期)2020-08-24 08:22:02
基于FANUC PICTURE的虛擬軸坐標顯示界面開發方法研究
藍谷: “涉藍”新引擎
商周刊(2017年22期)2017-11-09 05:08:31
哦,不怕,不怕
將植物穿身上
人機交互界面發展趨勢研究
植物罷工啦?
手機界面中圖形符號的發展趨向
新聞傳播(2015年11期)2015-07-18 11:15:04
植物也瘋狂
無形的引擎
河南電力(2015年5期)2015-06-08 06:01:46
主站蜘蛛池模板: 成人福利在线视频免费观看| 一本久道久综合久久鬼色| 国产精品免费露脸视频| 精品国产香蕉在线播出| 日韩精品毛片人妻AV不卡| 午夜成人在线视频| 亚洲高清国产拍精品26u| 国产 在线视频无码| 亚洲日韩高清在线亚洲专区| 波多野结衣国产精品| 色欲国产一区二区日韩欧美| 欧美精品v| 制服丝袜无码每日更新| 69国产精品视频免费| 亚洲天堂伊人| 97青草最新免费精品视频| 草草影院国产第一页| 黄色网址免费在线| 欧美日在线观看| 91在线视频福利| 亚洲中文无码h在线观看| 亚洲美女AV免费一区| 国产十八禁在线观看免费| 中文无码精品A∨在线观看不卡 | 啦啦啦网站在线观看a毛片| 九九热视频在线免费观看| 成人在线观看不卡| 国产欧美视频一区二区三区| 亚洲 日韩 激情 无码 中出| 国产青榴视频在线观看网站| 精品视频在线一区| 成年午夜精品久久精品| 亚洲啪啪网| 伊人激情久久综合中文字幕| 欧美午夜视频| 亚洲无码视频一区二区三区| 成人精品区| 国模在线视频一区二区三区| 在线色综合| 伊人久久大线影院首页| 扒开粉嫩的小缝隙喷白浆视频| 尤物亚洲最大AV无码网站| 国产乱子伦视频三区| 萌白酱国产一区二区| 亚洲区欧美区| 91免费片| 亚洲国产亚洲综合在线尤物| 九色综合伊人久久富二代| 影音先锋丝袜制服| 免费在线一区| 国产美女精品一区二区| 国产永久免费视频m3u8| 亚洲日本www| 欧美成人a∨视频免费观看 | 一级看片免费视频| 97青青青国产在线播放| 国产成人乱无码视频| 国产精品亚洲综合久久小说| 原味小视频在线www国产| 精品色综合| 亚洲无码高清免费视频亚洲| 五月天综合网亚洲综合天堂网| 色综合久久88| 毛片在线播放a| 国产亚洲第一页| 国产靠逼视频| 亚洲天堂网在线观看视频| 欧美精品另类| 99久久婷婷国产综合精| 日韩在线网址| 国产精品9| 99久久婷婷国产综合精| 久久a毛片| 精品综合久久久久久97超人| 亚洲欧美日韩动漫| 四虎亚洲国产成人久久精品| 色综合久久无码网| 九色视频最新网址| 一本大道在线一本久道| 黄色免费在线网址| 国产精品香蕉| 狠狠亚洲五月天|