box2d 圓形邊界的創(chuàng)建

本片文章是android仿摩拜貼紙碰撞|氣泡碰撞的補(bǔ)充苞轿。
好多同學(xué)私信問我茅诱,圓形邊界如何創(chuàng)建,今天就寫篇文章一起學(xué)習(xí)下搬卒。

演示.gif

android仿摩拜貼紙碰撞|氣泡碰撞中的評論中瑟俭,給大家提供了一種思路,就是通過繪制正多邊形的方式契邀,近似看做圓形摆寄,實際上當(dāng)邊足夠多時,就是一個圓坯门。

image.png

image.png

現(xiàn)在需要做的就是確定正多邊形的每一個頂點(diǎn)的坐標(biāo)(x,y)以及正多邊形邊的長度和角度微饥。

/**
     * 根據(jù)半徑獲取多邊形每個點(diǎn)的坐標(biāo)位置
     *
     * @param n 多邊形邊數(shù)
     * @param r 半徑
     * @return
     */
    public ArrayList polygon2(int n, int r) {
        float segmentlength = Double.valueOf(r * Math.sin(Math.PI / n)).floatValue();  // 計算邊長
        ArrayList<float[]> doubles = new ArrayList<>();
        double theta = 2 * Math.PI / n; // 角度
        for (int i = 0; i < n + 1; i++) {
            float x, y = 0f;
            x = Double.valueOf(r * Math.cos(theta * i)).floatValue();
            y = Double.valueOf(r * Math.sin(theta * i)).floatValue();
            float[] xy = new float[4];
            xy[0] = x + r;
            xy[1] = y + r;
            xy[2] = segmentlength;
            xy[3] = Double.valueOf(theta * i).floatValue();
            doubles.add(xy);
        }
        return doubles;
    }

生成圓形邊界,這里使用polygonShape.setAsBox(height, width, new Vec2(x,y), angle)繪制每一條邊古戴,具體看下面代碼欠橘。(這里重點(diǎn)需要關(guān)注物理單位和像素單位的區(qū)別,創(chuàng)建物理模型需要使用物理單位现恼,繪制到屏幕上時肃续,需要使用像素單位)

    /**
     * 設(shè)置世界邊界 圓形
     */
    private void initCircleWorldBounds(Canvas canvas) {
        // 繪制圓形邊框
        canvas.drawCircle(pWidth / 2, pHeight / 2, pHeight / 2, paint);
        if (isInitWorld) {
            return;
        }
        BodyDef bodyDef = new BodyDef();
        bodyDef.type = BodyType.STATIC;//設(shè)置零重力,零速度
        bodyDef.position.set(0, 0);
        Body bodyTop = world.createBody(bodyDef);//世界中創(chuàng)建剛體
        FixtureDef fixtureDef = new FixtureDef();
        fixtureDef.density = 1f;//物質(zhì)密度
        fixtureDef.friction = 0.3f;//摩擦系數(shù)
        fixtureDef.restitution = 0.5f;//恢復(fù)系數(shù)


        //設(shè)置圓形剛體邊界
        ArrayList positions = polygon2(36, Double.valueOf(pHeight / 2).intValue());
        for (int i = 0; i < positions.size(); i++) {
            float[] xy = (float[]) positions.get(i);
            float x = xy[0];
            float y = xy[1];
            float segmentlength = xy[2];
            float angle = xy[3];
            PolygonShape polygonShape = new PolygonShape();
            // 設(shè)置具有方向的shape
            polygonShape.setAsBox(0, pixelsToMeters(segmentlength), new Vec2(pixelsToMeters(x), pixelsToMeters(y)), angle);
            fixtureDef.shape = polygonShape;
            bodyTop.createFixture(fixtureDef);//剛體添加夾具
        }
        isInitWorld = true;
    }

項目地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叉袍,隨后出現(xiàn)的幾起案子始锚,更是在濱河造成了極大的恐慌,老刑警劉巖喳逛,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞧捌,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)姐呐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門殿怜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人皮钠,你說我怎么就攤上這事稳捆≡ǎ” “怎么了麦轰?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砖织。 經(jīng)常有香客問我款侵,道長,這世上最難降的妖魔是什么侧纯? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任新锈,我火速辦了婚禮,結(jié)果婚禮上眶熬,老公的妹妹穿的比我還像新娘妹笆。我一直安慰自己,他們只是感情好娜氏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布拳缠。 她就那樣靜靜地躺著,像睡著了一般贸弥。 火紅的嫁衣襯著肌膚如雪窟坐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天绵疲,我揣著相機(jī)與錄音哲鸳,去河邊找鬼。 笑死盔憨,一個胖子當(dāng)著我的面吹牛徙菠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播郁岩,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼婿奔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了驯用?” 一聲冷哼從身側(cè)響起脸秽,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蝴乔,沒想到半個月后记餐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薇正,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年片酝,在試婚紗的時候發(fā)現(xiàn)自己被綠了囚衔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡雕沿,死狀恐怖练湿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情审轮,我是刑警寧澤肥哎,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站疾渣,受9級特大地震影響篡诽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜榴捡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一杈女、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吊圾,春花似錦达椰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至板丽,卻和暖如春呈枉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背埃碱。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工猖辫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砚殿。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓啃憎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親似炎。 傳聞我的和親對象是個殘疾皇子辛萍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354