免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
エンジンv2.0.10
目標
タイルマップ生成レーストラッククラッシュ
プロセス
まず、
我々は、タイルマップをロールアップする必要があります。
二つのレベル、壁や床に分かれて、非常に簡単なマップ、。
その後、
直接ラインでCocosCreatorに階層マネージャにドラッグ。
その後、層のノードが自動的にコンポーネントを形成し、マウントができます。
次いで、壁や車プラス剛性に
壁に注目静的剛体であり、車が動いている、私は、テストを容易にするために、それを与えた15度回転。
図は次のとおりです。
最後に、
getTileGIDAtこの方法の使用はタイルがあるかどうかを検出します。
そのようなタイル00の左上隅のような座標変換は、変換され-375725座標があります。
私がやるので、それはマップ1500 800枚の* 50枚の* 50枚のタイルです。
const {ccclass, property} = cc._decorator;
@ccclass
export default class Main extends cc.Component {
@property(cc.TiledLayer) wall: cc.TiledLayer = null;
// 小车刚体
@property(cc.RigidBody) car: cc.RigidBody = null;
onLoad () {
let p = cc.director.getPhysicsManager();
p.enabled = true;
p.debugDrawFlags = 1;
// 关闭重力
p.gravity = cc.v2(0, 0);
}
start () {
// 地图为 16 * 30; 尺寸为 800 * 1500
for (let i = 0; i < 16; i++) {
for (let j = 0; j < 30; j++) {
let n = this.wall.getTileGIDAt(i, j);
console.log(n);
// 如果存在瓦片,打印观察 n
if (n != 0) {
// 计算位置, 800的一半是400 再加上方块长度的一半
let x = -400 + i * 50 + 25;
let y = 750 - j * 50 - 25;
// 加碰撞盒子
let p: cc.PhysicsBoxCollider = this.wall.node.addComponent(cc.PhysicsBoxCollider);
p.offset.set(cc.v2(x, y));
p.size.width = 50;
p.size.height = 50;
p.apply();
}
}
}
}
update (dt) {
// 一直给一个向前的力 测试用
let hudu = cc.misc.degreesToRadians(this.car.node.rotation);
let x = Math.sin(hudu);
let y = Math.cos(hudu);
this.car.applyForceToCenter(cc.v2(100 * x, 100 * y), false);
}
}
効果
O(∩_∩)O ~~
しないように取得します。
私のブログを追加:(プロジェクト内のQQのグループには、グループがファイルああを持っている)
706 176 551
私たちは一緒に学びます!
O(∩_∩)O ~~