アフィリエイト広告を利用しています
最新記事
検索
プロフィール
てぅちかさんの画像
てぅちか
  • ・禁煙4年目
  • ・禁パチ挫折
  • ・禁睡眠薬2年目
  • ・猫様との同居生活2年目

 ブログランキング・にほんブログ村へ

にほんブログ村 ゲームブログ ブラウザゲームへ
にほんブログ村 IT技術ブログ JavaScriptへ
プロフィール
最新コメント
現在HTML調整中・・・・・・ by てぅちか (04/16)
月別アーカイブ
タグクラウド
ブログはこちらからお借りしてます A8ネット A8ネット サーバーはこちらを……借りたい ミックスホスト ミックスホスト エックスサーバー エックスサーバー

広告

posted by fanblog

2021年05月17日

【文字表示】PIXIって簡単便利だね【SP回転】

今日は得点のテキストを表示させてみますぞ!

■参考サイトにほんブログ村 IT技術ブログ JavaScriptへ 憧れサーバーその1その2
I did it !

  • PIXI:テキストを表示する
  • PIXI:テキストを更新する
  • PIXI:スプライトを回転させる

PIXI:テキストを表示する

ささっと最低限のテキスト表示スクリプトを書いてみます。
54| //スコアテキスト表示に関する処理
55| const textStyle = new PIXI.TextStyle({});
56| const text = new PIXI.Text("得点:0", textStyle);
57| gameScene.addChild(text);

ss_20210517_01.png

ステージの左上にテキストが表示されました。簡単ですね。
次は55行目の中カッコの中でスタイルを設定しましょう。

55| const textStyle = new PIXI.TextStyle({
56|  fontSize: 20,
57|  fill: 0xffffff,
58|  dropShadow: true,
59|  dropShadowDistance: 2,
60| });

区切りは「,」で。
単語を日本語にしてしまったのでフォント指定はせず、大きさと色と影の設定だけしています。
さっきの指定なしのテキストと比べるとこんな感じになりました。
ss_20210517_02.png


PIXI:テキストを更新する

スコアのテキストが表示出来たら、次はボールをクリックするたびにプラスされるようにしましょう。
44|  score++;

65| text.text = '得点:${score}';


44行目はボールのクリックイベントの中でスコア加算
65行目は「function gameLoop()」の開始直後で表示の更新をしています。

ss_20210517_0302.png
……うん。表示がおかしいです。

65行目がそのまま表示されてますなぁ。
サンプルと見比べてみよう。
ss_20210517_03.png

んんん?
サンプル| text.text = `SCORE:${score}`;
自分の | text.text = '得点:${score}';


わたしのシングルクォーテーション、偽物かもしれない!

今日初めて正しいシングルクォーテーションの出し方を知りました。
ずっとキーボードの「Shift」+「7」で出してたんですが、「Shift」+「@」で出すんですね。

覚えたての「`」で括りなおしたら、正しく表示されました。いえあ。


PIXI:スプライトサイズを指定する

38| const ball = new PIXI.Sprite(resources["img_s.svg"].texture);//ボールをスプライト化
39| ball.x = 125; //ボールの配置最大400
40| ball.y = 350; //最大600
41| ball.width = 150; //ボールの大きさ
42| ball.height = 150;

40行目あたりでボールの初期配置を決めているので、そこに大きさも入れておきます。
これでスマホ画面でもSVG画像が大きく表示されるようになるはず!


PIXI:スプライトを回転させる

ついでなんでもう少しいじろう!
つついたり、壁にぶつかるたびに回転が掛かるといいな。

ちょっと調べてみたら、スプライトに「.rotation」で数字を渡してあげると
プラスで右回り、マイナスで左回りするそうです。
渡す数値はラジアンで、6.28で一周。物理の授業を思い出しますね……。にーぱいあーるじじょうが云々。記憶の薄れた今ではただの呪文の様です。

23| let ballR = 0;  //ボールの回転 正右負左一周6.28 「1.変数」で定義

73| ball.rotation += ballR;// ボールに回転を加算「6.メイン」XYの速度と同じく加算

77| ballR = -ballR; //82行目も同様。Xの壁にぶつかったら逆回転

93| ballR *= 0.8; //Yの壁にぶつかったら摩擦でだんだん止まる

回転速度の「ballR」を新たに作り、
速度の「ballVx」「ballVy」をいじるところで一緒にいじっていきます。

さて、しかし動かないぞ。

よく見たら23行目の初期値が0なので掛け算しても0のままでした。

というわけで初期値に0.1を入れたら大きくぐねるような動きをして、
一回止まったらその後はボールが動いても回転しなくなりました。
なので数値を小さく、0.02を入れて停止からの復帰にも追記。

49| if (ballVx < 1 || ballVx > -1) {
50|    ballVx += 1;
51|    ballR += 0.02;
52|    } //☆停止からの復帰

するとスピードはまあまあよくなりました。

ぐねる動きはたぶんアンカーが中央じゃないからっぽいので移動させてみましょう。
前にちらっと勉強した「.ancher.set(,)」の出番です!
XYともに「0.5」を指定してスプライト中央にアンカーを移動しました。
すると各所の配置がずれたので調整です。

ついでに動きが不自然な気がしたので
スピードが上がったら、左右の壁にあたっても回転は反転しないように変更。

こうなりました!
 お手玉テスト http://juz.r.ribbon.to/teutika/01otedama02.html

16|PIXI.loader.load((loader, resources) => {
17| //1. 状態が変化する変数一覧
18| let gameLoops = [];//毎フレーム処理する関数を入れる配列
19| let score = 0; //スコア
20| let ballVx = 2; //ボール移動速度 X方向
21| let ballVy = 0; //ボール移動速度 Y方向
22| let ballR = 0.02; //ボールの回転 正右負左一周6.28
29|
30| //6.ゲームのメインシーンを生成する関数
31| function createGameScene() {
34| score = 0;
35|
36| const gameScene = new PIXI.Container();//ゲームシーン生成
37| app.stage.addChild(gameScene); //ゲームシーンをステージに追加
38| const ball = new PIXI.Sprite(resources["img_s.svg"].texture);//ボールをスプライト化
39| ball.anchor.set(0.5, 0.5);
40| ball.x = 200; //ボールの配置最大400
41| ball.y = 400; //最大600
42| ball.width = 150; //ボールの大きさ
43| ball.height = 150;
44| ball.interactive = true; //クリック可能に
45| ball.on("pointerdown", () => //クリック時に呼ぶ関数
46| {
47| score++;
48| ballVy = -8;
49| if (ballVx < 1 || ballVx > -1) { //☆停止からの復帰
50| ballVx += 1;
51| ballR += 0.02;
52| }
53| else if (ballVx >= -10 || ballVx <= 10) { //☆速度10まで追い打ち
54| ballVx *= 1.2;
55| ballR = -ballR;
56| }
58| });
59| gameScene.addChild(ball); //ボールをゲームシーンに追加
50|
51| //スコアテキスト表示に関する処理
52| const textStyle = new PIXI.TextStyle({
53| fontSize: 20,
54| fill: 0xffffff,
55| dropShadow: true,
56| dropShadowDistance: 2,
57| });
58| const text = new PIXI.Text("得点:0", textStyle);
59| gameScene.addChild(text);
60|
61| function gameLoop() {
62|   text.text = `得点:${score}`;
63|   if (score === 0) return;
64|
65|   ball.x += ballVx; // ボールに速度を加算
66|   ball.y += ballVy;
67|   ball.rotation += ballR;// ボールに回転を加算
68|   if (ball.x > 330) { //X方向の挙動 壁で反射
69|    ball.x = 330;
70|    ballVx = -ballVx;
71|    if (ballVx >= -5 || ballVx <= 5) {//速度5までは回転が反転
72|    ballR = -ballR;
73|    }
74|   }
75|   if (ball.x < 70) {
76|    ball.x = 70;
77|    ballVx = -ballVx;
78|    if (ballVx >= -5 || ballVx <= 5) {//速度5までは回転が反転
79|    ballR = -ballR;
80|    }
81|   }
82|   ballVy += 0.1; //Y方向の挙動 重力
83|   if (ball.y <= 70) {//☆上に壁を作って跳ね返るようにする
84|    ball.y = 70;
85|    ballVy = -ballVy; //Y 跳ね返る
86|   }
87|   if (ball.y > 530) {//☆下に壁を作って落ちないようにする
88|    ball.y = 530;
89|    ballVy = -ballVy / 2; //Y 落ちたら跳ね返る
90|    ballVx *= 0.8; //X 摩擦で止まる
91|    ballR *= 0.8;
92|   }
96| }
02|});

と言うわけで、今日はここまで!

次は複数スプライトを表示して、衝突させてみたいと考えています。
あと、できれば拡縮させてばいんばいんさせたいな。


エックスサーバーエックスサーバーミックスホストミックスホストにほんブログ村 にほんブログ村へサブカテゴリで意外と上位!?
タグ:JavaScript VSCode
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/10734568
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は30日以上新しい記事の更新がないブログに表示されております。