1. シーンレイアウト2. ハンドルリスナーを追加する1. イベントの変更を監視するオリジナルマウスシリーズからタッチシリーズへ変換
2. 座標設定タッチが押されると、押下位置が変わります(ワールド座標変換を使用)、タッチが解除されると元の位置に戻ります(直接 0 に設定、0 座標はデフォルトの相対座標です)。 onTouchMove(e:cc.Event.EventTouch){ // e.getLocation() はクリックされた位置、つまりワールド座標です。 // ワールド座標をローカル座標に変換する必要があります。 let parent=this.node.parent; // 親ノード (円形シャーシ) pos:cc.Vec2=parent.convertToNodeSpaceAR(e.getLocation()); とします。 ノードの位置を設定します。 } オンタッチキャンセル(){ this.node.setPosition(cc.v3(0,0,0)); } 3. ハンドルをトレイに固定する方位角を使用してエッジの位置を特定します。 pos.normalize() メソッドは、(0, 0) を基準とした点の (cos, sin) を返し、Vec2 オブジェクトを返します。 let parent=this.node.parent; // 親ノード(円形シャーシ) pos:cc.Vec2=parent.convertToNodeSpaceAR(e.getLocation()); とします。 // 点の位置 (cos, sin) direction:cc.Vec2=pos.normalize() とします。 // 境界内に制限する let maxR = 100-20; //クリックした点からトレイの中心までの距離 let r : number = cc.Vec2.distance(pos, cc.v2(0,0)); r > maxR の場合 { pos.x = maxR * 方向.x; pos.y = maxR * direction.y; } // cc.log("相対位置: " + pos.x + ", " + pos.y); this.node.setPosition( pos ); 3. 車のコントロールを追加する1. 車の回転cc.Node.angle ローテーションの実装: オンロード(){ this.car=cc.find("Canvas/車"); } let radian = pos.signAngle (cc.v2 (1,0)); //クリック位置と水平線の間の角度を計算します let ang = radian / Math.PI * 180; //ラジアンを角度に変換します this.car.angle = -ang; //反時計回りが正なので、ここで時計回りに調整します 2. 車の動き
車の移動スクリプト 方向: cc.Vec2 = null; 速度: 数値 = 3; オンロード() { } 始める() { } 更新(dt) { if (this.direction == null) return; // 停止 let dx = this.speed * this.direction.x; dy = this.speed * this.direction.y とします。 pos = this.node.getPosition(); とします。 位置x += dx; 正のy座標 += dy座標; ノードの位置を設定します。 } ゲームパッド制御スクリプト 車: cc.Node = null; carscript: cc.Component = null; // ライフサイクルコールバック: オンロード() { this.car = cc.find("Canvas/car"); this.carscript = this.car.getComponent("CarMove"); } 始める() { this.node.on('touchstart', this.onTouchStart, this); this.node.on('touchmove', this.onTouchMove, this); this.node.on('touchend', this.onTouchCancel, this); this.node.on('touchcancel', this.onTouchCancel, this); } オンタッチスタート() { } onTouchMove(e: cc.Event.EventTouch) { // e.getLocation() はクリックされた位置、つまりワールド座標です。// ワールド座標をローカル座標に変換する必要があります。// let parent=this.node.parent;// 親ノード (円形シャーシ) // pos:cc.Vec2=parent.convertToNodeSpaceAR(e.getLocation()); とします。 // this.node.setPosition(pos); let parent = this.node.parent; // 親ノード(円形シャーシ) pos: cc.Vec2 = parent.convertToNodeSpaceAR(e.getLocation()); とします。 // 点の位置 (cos, sin) 方向を指定します: cc.Vec2 = pos.normalize(); // 境界内に制限する let maxR = 100 - 20; r: number = cc.Vec2.distance(pos, cc.v2(0, 0))とします。 (r>maxR)の場合{ pos.x = maxR * 方向.x; pos.y = maxR * direction.y; } // cc.log("相対位置: " + pos.x + ", " + pos.y); ノードの位置を設定します。 let radian = pos.signAngle(cc.v2(1, 0)); //クリック位置と水平方向の間の角度を計算します。let ang = radian / Math.PI * 180; //ラジアンを角度に変換します。this.car.angle = -ang; //反時計回りが正なので、ここで時計回りに調整します。this.carscript.direction = direction; } オンタッチキャンセル() { this.node.setPosition(cc.v3(0, 0, 0)); // 車を停止するには方向を null に設定します this.carscript.direction = null; } // 更新 (dt) {} 最終結果 上記は、CocosCreator でゲーム コントローラーを使用する方法の詳細です。CocosCreator コントローラーの例の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: MySQLのジョイントインデックス機能の分析と使用例
>>: Linuxでスワップパーティションファイルを作成する方法
目次背景実装のアイデア成果を達成する背景最近取り組んでいるプロジェクトは、Vue2 で構築されたプロ...
nginx.conf設定ファイルは次のとおりです。 ユーザー nginx; ワーカープロセス 1; ...
質問:私のブログのエンコーディングは utf-8 です。ページを開くと空白になっていることもあります...
目次1. podmanの紹介2. Dockerと比較した利点3. 互換性4. バックグラウンド サー...
序文要素がビューポート内にあるかどうかを監視する2つの方法を共有する1. 位置計算Element.g...
オンラインで検索して重複データを削除し、ID が最小のデータだけを残します。方法は次のとおりです。 ...
目次ミニプログラム開発者ツールのソースコードを表示する方法ミニプログラムアーキテクチャ設計1. ミニ...
序文Nginxの組み込みモジュールは、同時リクエスト数の制限とリクエストのソースの制限をサポートして...
背景アジャイル モデルは広く使用されており、テストは特に重要です。新しいバージョンは頻繁にリリースす...
前回の記事では、Oracle でピボット テーブルを実装するいくつかの方法を紹介しました。今日は、同...
1. Ansibleのプレイブックを使用してhttpdを自動的にインストールする1) まず、Ansi...
今日は、Windows 10 で Linux サブシステムを有効にする方法を紹介します。早速、手順を...
<br />この世に道はない。より多くの人が歩くようになると、それは道になります。最初は...
目次質問伸ばす問題を解決する要約する質問プロジェクトの要件に従って、以下の州地図で個々の都市を(異な...
1. 対応するNode.jsパッケージを見つけます。https://nodejs.org/downl...