Cocos2d-x v3.0物理系統 利用PhysicsEditor創建多邊形

Cocos2d-x 3.0的新物理系統我就不必多說了,接觸一段時間,感覺還是不錯的。對于那些基本概念,網上的教程已經泛濫了,就不多說了,不過對于創建多邊形物體的教程,還真不多,很多都是創建圓形和矩形,這兩個很簡單,傳入圖片的大小數據基本就可以搞定了。多邊形的麻煩之處在于每個點的位置,Mac下有VertexHelper可以很輕松獲取到多邊形的每個點,然后創建出來,但Windows下,呃,確實我沒找到什么好的工具,PhysicsEditor在以前使用Box2d原生的代碼創建多邊形還是挺好用的,現在就不太適合了,所以本篇的用法也是建立在它的之上做出來的,如果有好的辦法,歡迎提出分享哈。


話不多說,看看如何利用PhysicsEditor來創建一個多邊形。


打開PhysicsEditor,導入一張多邊形,姑且咱們先拿個三角形開刀說,導入圖片之后,選擇上方的add polygon

<img src="http://www.2cto.com/uploadfile/Collfiles/20140823/201408230920218.png" alt="" http:="" www.2cto.com="" kf="" ware="" vc="" "="" target="_blank" class="keylink" style="box-sizing: border-box; border: medium none; vertical-align: middle; display: block; margin: 0px auto; max-width: 100%; width: 2090.67px; height: auto;">vcfQzsf40/LArbP2wLSjrM/x1eLR+aOsPC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20140823/2014082309202110.png" alt="\">

這樣多邊形的幾個點位置就算完成了,下面的步驟很關鍵,

在右邊Exporter選擇“Chipmunk generic”,因為cocos封裝的多邊形頂點是按照順時針的方向來的,和box2d不一樣,box2d是反方向的。

當你選擇之后,會看到圖中多了一個點,那個是錨點的位置,所以接下來是設置錨點的位置,新版的物理系統在setPhysicsBody的時候是將Body綁定在圖片的中心點位置,所以我們在PhysicsEditor中繪制的Body區域也需要將錨點設置在中心點,不然回過頭在創建Body的時候還要設置偏移量offset。

如下圖,將關鍵的地方設置成(0.5, 0.5)就可以了。

\

接下來,保存一下這個文件,是一個plist&#26684;式的,用個Notepad&#43;&#43;打開下,找到下面有個點數組的位置,

\

我們就是需要這一組點數據,我想后面的事大家應該就很清楚了,打開VS,創建一個多邊形咯。

auto triangle = Sprite::create("CyanTriangle.png");	 triangle->setPosition(Point(size.width/2, size.height*0.8)); Point points[3] = { Point(-50.00000, -43.50000), Point(0.00000, 43.50000), Point(51.00000, -43.50000) };  auto polygonBody = PhysicsBody::createPolygon(points, 3); triangle->setPhysicsBody(polygonBody); addChild(triangle);

PhysicsBody::createPolygon的參數第一個是點數組,第二個是數組的大小,也就是邊的個數。

運行看一下效果,

\

由于打開了debug模式,所以紅色的區域非常貼切,可以用啦。


當然咯,PhysicsEditor也可以做凹多邊形的,不過這個步驟要麻煩不少,但過程基本一樣,簡單過一遍,

\

拿個logo圖片做一下,可以右鍵添加點哦,然后簡單拉出這樣的效果。然后還是保存我們的plist文件。

對于凹多邊形,我們的策略基本就是采用addShape的方式,將其分割成多個凸多邊形,然后組合在一起,他們的碰撞區域是組合起來的,所以沒問題。

這個時候打開plist文件,可以看到是這樣的點數組,

\

它的策略也是這樣的,所以符合我們的要求,只是這么多點,咱們要一個一個添加,確實略顯麻煩,沒辦法,繼續來吧。。。。

一個數組點創建一個多邊形Shape,所以代碼是這樣的。

auto logo = Sprite::create("powered.png"); auto logoBody = PhysicsBody::create(); Point vert1[4] = { Point(1.00000, 134.50000), Point(24.00000, 111.50000), Point(-16.00000, 126.50000), Point(-22.00000, 149.50000) }; logoBody->addShape(PhysicsShapePolygon::create(vert1, 4)); Point vert2[4] = { Point(-100.00000, -149.50000), Point(24.00000, 111.50000), Point(101.00000, 111.50000), Point(101.00000, -149.50000) }; logoBody->addShape(PhysicsShapePolygon::create(vert2, 4)); Point vert3[4] = { Point(24.00000, 111.50000), Point(-100.00000, -149.50000), Point(-32.00000, 112.50000), Point(-16.00000, 126.50000) }; logoBody->addShape(PhysicsShapePolygon::create(vert3, 4)); Point vert4[3] = { Point(-32.00000, 112.50000), Point(-100.00000, -149.50000), Point(-100.00000, 112.50000) }; logoBody->addShape(PhysicsShapePolygon::create(vert4, 3)); logo->setPhysicsBody(logoBody); logo->setPosition(Point(size.width*0.8, size.height*0.7)); addChild(logo); logo->setRotation(180);

好了,這樣就可以了,我還旋轉了一下,為了測試一下上面那一撮頭發的碰撞區域,哈哈~



本文轉自:http://m.2cto.com/kf/201408/327977.html

轉載于:https://www.cnblogs.com/Anzhongliu/p/6091778.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271634.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

公眾號開發 單獨 給某個用戶 推送消息_韓國5G用戶6月底已達134萬 較5月底增加近70%...

中關村在線消息&#xff1a;韓國三大運營商SK、KT和LG率先于去年12月開始向企業用戶提供商用5G 服務&#xff0c;今年4月初推出面向個人消費者的5G民用服務。韓國作為全球首個推出5G 服務的國家&#xff0c;他們的5G用戶數量在6月時已經突破100萬大關。日前韓國公布6月底最新的…

程序語言的概念知識筆記

1、低級語言和高級語言 計算機指令程序&#xff1a;0、1 組成的機器指令序列。特點&#xff1a;效率低、可讀性差、難以維護。 匯編指令&#xff1a;用常用的符號代替0、1 序列來 表示機器指令&#xff0c;例如用ADD表示加法。 高級語言&#xff1a;面向對象設計的各類應用的程…

java lambda 表達式中的雙冒號和箭頭的用法 ::

先構造一些數據,創建一個User類 java lambda 表達式中的雙冒號的用法 &#xff1a;&#xff1a; 雙冒號運算就是Java中的[方法引用],[方法引用]的格式是 類名::方法名 如下圖所示 User是一個類, getAge是方法名,注意是方法名呀&#xff0c;后面沒有括號()的。為什么不要括號…

android 麥克風耳機,Android force AudioRecord使用耳機麥克風

我使用AudioRecord來錄制音樂&#xff0c;但是當我錄制它時使用手機麥克風。 我該如何強迫他使用耳機的頻道&#xff1f;Android force AudioRecord使用耳機麥克風我用這個代碼&#xff1a;int minSize AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_IN_MONO, Audi…

linux內核設計與實現 中文第三版 pdf_大牛推薦的5本 Linux 經典必讀書

今天給大家推薦5本Linux學習相關的書籍&#xff1b;這些書籍基本都是很多大牛推薦過&#xff0c;并且深受業界好評的書&#xff1b;雖然只有5本&#xff0c;但是相信把5本全都認真看過的同學應該不多吧&#xff1f;希望這些書能夠幫助你進階為大牛&#xff01;5.《鳥哥的 Linux…

號稱最好的國產操作系統在 Windows 10 面前能否一戰?

統信軟件旗下的UOS操作系統正式推出UOS V20個人版&#xff0c;并開啟99元預售活動。統信UOS雖名不見經傳&#xff0c;但身披“國產操作系統”外衣的它卻讓科技圈炸開了鍋。有人說它是“國貨之光”&#xff0c;堪稱最好的國產系統&#xff0c;但也因為“收費”的問題引發一致批評…

js打開android應用程序,瀏覽器通過JS打開Android程序

做項目的時候&#xff0c;項目中有個需求&#xff0c;需要通過網頁打開app&#xff0c;聽到這個功能&#xff0c;我先是蛋疼了一會&#xff0c;但是在網上查了一下資料發現原理其實很簡單&#xff0c;本質就是通過瀏覽器輸入我們本地android程序的路徑&#xff0c;不過這個路徑…

lamba統計最大值,最小值,平均值,總和,個數

代碼如下: List<Integer> ages Arrays.asList(1,3,5,7,8,10,12); IntSummaryStatistics intSummaryStatistics ages.stream().mapToInt(e -> e).summaryStatistics(); System.out.println("最大值: " intSummaryStatistics.getMax()); System.out.print…

簡單的學習心得:網易云課堂Android開發第六章SQLite與ContentProvider

一、SQLite 1、基本操作&#xff1a; &#xff08;1&#xff09;創建數據庫&#xff1a;在SQLiteOpenHelper的子類構造器中創建。 &#xff08;2&#xff09;創建表&#xff1a;在SQLiteOpenHelper的子類onCreate方法中&#xff0c;調用execSQL方法實現。 &#xff08;3&#x…

程序語言的組成知識筆記

程序語言的基本成分包括數據‘運算、控制、傳輸。 1、程序語言的數據成分 數據成分指程序中的數據對象&#xff0c;數據是程序程序操作的對象&#xff0c;具有存儲類型、數據類型、數據名稱、作用域、生存周期等屬性。 1.1 常量和變量 按照程序運行時數據能否改變&#xff0c;將…

python車牌識別逆光怎么辦代碼_這攝像頭除了能逆光識別車牌,還會跟人打招呼?...

前段時間&#xff0c;筆者偶然在某寶上發現了一款變光全彩的智能警戒攝像頭&#xff01;這款攝像頭的型號為JA-F8&#xff0c;是一臺室外防水槍機。說實話&#xff0c;這東西外觀有點奇葩&#xff0c;談不上好看。但正是因為它“骨骼精奇”&#xff0c;我才抱著好奇的心態點了進…

android sqlite alert table,android sqlite數據庫操作

sqlite有一點不同于其他常見數據庫&#xff0c;就是sqlite數據庫是存成文件的&#xff0c;可以直接把該文件從手機里導出來&#xff0c;以文件的形式存在&#xff0c;然后放到電腦上查看。Android操作數據庫有如下步驟&#xff1a;1、繼承SQLiteOpenHelper,實現里面的方法。pub…

Executors創建線程池

java jdk1.5提供線程池 在java.util.concurrent包下提供工廠類Executors用于生產線程池&#xff0c;Executors提供了4種線程池 newFixedThreadPool&#xff1a; 創建一個線程池&#xff0c;該線程池重用固定數量的從共享無界隊列中運行的線程。 newScheduledThreadPool&#x…

Maven項目中使用JUnit進行單元測試

1.打開maven項目中的pom.xml&#xff0c;添加JUnit 的jar包 2.在src/test/java下右鍵新建JUnit Test Cast 轉載于:https://www.cnblogs.com/liaojie970/p/5588326.html

匯編程序基本原理知識筆記

1、匯編語言的概念 定義&#xff1a;為特定計算機或計算機系統設計的面向機器的符號化程序設計語言。匯編程序也就是用匯編語言編寫的程序。計算機要運行匯編程序需要用專門的翻譯程序進行翻譯&#xff0c;然后計算機才可以識別。 匯編語句的分類&#xff1a;指令語句、偽指令語…

linux虛擬主機_Windows虛擬主機和linux虛擬主機有什么區別?

不少租用虛擬主機的用戶在問一個同樣的問題&#xff1a;windows空間和linux空間哪個好?這里給大家做一下全面的科普。一、windows空間和linux空間的區別系統的不同①windows空間則是由windows系統的服務器開設出來的空間&#xff0c;其中windows server系統環境大多為win2008&…

編譯程序基本原理的知識筆記

編譯程序的作用是把某高級語言書寫的源程序翻譯成與之等價的目標程序。 1、編譯過程 1.1 詞法分析 編譯過程的第一階段主要任務是對源程序從前往后&#xff08;從左往右&#xff09;逐個字符掃描&#xff0c;從中識別出一個個單詞符號。“單詞”是程序設計語言的基本語法單位&a…

lamaba中reduce方法將集合中的所有整數相加,并返回其總和

reduce&#xff1a;也是對所有值進行操作&#xff0c;但它是將所有值&#xff0c;按照傳入的處理邏輯&#xff0c;將結果處理合并為一個 如&#xff1a;將集合中的所有整數相加&#xff0c;并返回其總和 下面看個例子: 如&#xff1a;將集合中的所有整數相加&#xff0c;并返…

mx2 android os耗電,魅族MX3 Flyme OS 3.2充電慢、耗電快問題的解決方法詳解

一個星期前刷了3.2&#xff0c;但充電和耗電問題一直困擾著我&#xff0c;我的魅兔主要出現以下問題&#xff1a;1.充電慢&#xff0c;基本四個小時充滿。如果一邊玩一邊充&#xff0c;甚至會掉電。2.耗電極快&#xff0c;待機一小時掉電10%&#xff0c;待機一晚掉電50%。倒是出…

UML入門之類圖教程

一 簡單實例電話父類telphone 擁有發消息和打電話接口Playgame 能夠打游戲AndroidPhone 重寫了發消息 繼承于telphoneMacPhone 除了基礎打電話和發消息&#xff0c;還能打游戲 繼承于telphone實現于playgame了接口GameMaching 能夠打游戲 實現于playgame了接口 二解決問題 1. …