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でスワップパーティションファイルを作成する方法
Web デザインにおけるツリーとは何ですか?簡単に言うと、リンクをクリックするとサブディレクトリが展...
この記事では、MySQL 8.0.16圧縮パッケージのインストールと設定方法を参考までに紹介します。...
目次1. 現象2. 解決策3. 要約: 1. 現象1. 要件: 特定の表示ページをキャプチャしてアル...
Windows Server 2008 サーバーが自動的に再起動します。サーバーにログインした後、ど...
1. Redisイメージを取得するdocker pull redis 2. それぞれポート6379、...
状況の説明: データベースが異常に起動およびシャットダウンしたため、サービスを再度起動したときに「起...
この記事では、JavaScriptカスタムカレンダーエフェクトの具体的なコードを参考までに紹介します...
構造関連タグ--------------------------------------------...
(Web ページの読み込み中に、コンテンツが多すぎて読み込みと待機が続くことがあります。このとき、...
1. maxPostSize を設定する理由は何ですか? tomcat コンテナには送信データのサイ...
解決すべき問題主にコンポーネント間のクロスレベル通信用なぜディスパッチとブロードキャストを自分で実装...
序文MySQL データベースのパスワードを忘れると、データベースに正常にアクセスできなくなり、パスワ...
この記事の例では、vue検証コードコンポーネントで使用される具体的な実装コードを参考までに共有してい...
TranslateThis URL: http://translateth.is Google 翻訳...
MySQLの左結合が無効であり、その使用方法今日SQLを書いていたとき、左結合を使用すると左のテーブ...