Samael

LightBulb回顾

LightBulb回顾

最近帮朋友做在做一个超休闲的物理游戏, 在Android与微信小游戏上发布, 制作过中的一些小问题总结一下, 使用引擎是cocos creator

共有问题

// GameUIWX
cc.Class({
	extends: require('GameUI'), // <= 继承自GameUI
	properties: {},
	onGameReady() {
		this._super() // <= 父类
	},
})

微信小游戏

Android

-keep public class main.** { *; }
-keep public class com.janusgames.lightbulb.** { *; }

TIPS

绘制瞄准线的代码 IMG_5081

rayCast(p1, p2) {
    var manager = cc.director.getPhysicsManager();
    var result = manager.rayCast(p1, p2, cc.RayCastType.Closest)
    //[0];
    if (result.length > 0) {
        result = result[0]
    } else {
        result = null
    }
    if (result && result.collider.node.group == 'line') {
        p2 = result.point;
        this.ctx.circle(p2.x, p2.y, 5);
    }

    //获得从start到end的向量
    var line = p2.sub(p1)
    //获得这个向量的长度
    var lineLength = line.mag()
    //根据每条线段的长度获得一个增量向量
    let length = 45
    var increment = line.normalize().mul(length)
    //确定现在是画线还是留空的bool
    var drawingLine = true
    // 临时变量
    var pos = p1.clone()

    //只要线段长度还大于每条线段的长度
    for (; lineLength > length; lineLength -= length) {
        //画线
        if (drawingLine) {
            this.ctx.circle(pos.x, pos.y, 5)
            pos.addSelf(increment)
            this.ctx.fill()
        }
        //留空
        else {
            pos.addSelf(increment)
        }
        //取反
        drawingLine = !drawingLine
    }

    if (!result) return;
    if (result.collider.node.group != 'line') return
    // 反射
    let l = p2.sub(p1)
    let n = result.normal.normalize()

    var r = l.sub(n.mul(n.dot(l)).mul(2)).mul(500).add(p2)
    p1 = p2;
    // 返回停止点
    // 多次组合可以实现反射的效果
    return {
        p1: p1,
        p2: r,
    }
}

Share this: