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でスワップパーティションファイルを作成する方法
サーバー: Ubuntu Server 16.04 LSSクライアント: Ubuntu 16.04 ...
VMware が異常シャットダウンした後、再起動すると「この構成ファイルを排他的にロックできませんで...
この記事は、WindowsでのMySQL 8.0.11のインストールチュートリアルを記録しています。...
JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明最近、...
大きな落とし穴、Linuxシステムに付属するPythonのバージョンを簡単に削除しないでください1....
<meta name="viewport" content="...
目次序文1. Dockerをインストールする2. Dapr CLIをインストールする3. Net6 ...
IE で ClearType をオンにした後に発生する透明フォントの問題を解決するには、透明要素に背...
WeChat ミニプログラムのネイティブ コンポーネントであるカメラ、キャンバス、入力 (フォーカス...
この記事では、jsネイティブカルーセルプラグインの具体的なコードを参考までに共有します。具体的な内容...
1. MariaDB と MySQL の紹介1. MariaDB の紹介MariaDB は、MySQ...
目次refとは何かrefの使い方DOM要素に配置するクラスコンポーネントに配置する関数コンポーネント...
独自のデモを作成するときに、display:flex を使用して垂直方向の中央揃えを実現したいと思い...
フロントエンドエンジニアとして、IE は私たちにとって馴染み深いものであるはずです。設計案を実装する...
目次導入クロージャの使用カレー作りパブリック変数の実装キャッシュカプセル化(属性のプライベート化)閉...