ジャンル雑多なゲーム・ゲーム制作関連の色々な情報を取り扱っているブログ。最近はBlenderについてが中心。
[phina.js]基本 — 色んな図形オブジェクトについて

[phina.js]基本 — 色んな図形オブジェクトについて

今回の記事は、phina.jsで用意されているShape系クラスを使って様々な図形オブジェクトを描画していこうと思います。もしphina.jsが分からない方は、【phina.js】基本 — テンプレートについてをご一読いただくことをおすすめいたします。

※2018年9月26日 加筆・修正を行いました。

※2018年9月28日 加筆・修正を行いました。

※2018年10月18日 加筆・修正を行いました。

準備

コーディングは、RunstantRunstant liteを使って試されることをおすすめします。

一応雛型として置いておきます。

<script src='https://cdn.jsdelivr.net/gh/phi-jp/phina.js@0.2.3/build/phina.js'></script>
// グローバル領域に展開
phina.globalize();

/*
 * メインシーン
 */
phina.define("MainScene",{
  // 継承
  superClass:"DisplayScene",
  // コンストラクタ
  init: function(){
    // 親クラスの初期化
    this.superInit();
    // ここに処理を書く
  },
  // 更新
  update: function(){
  
  },
});

/*
 * メイン処理
 */
phina.main(function(){
   // アプリケーションを生成
   var app = GameApp({
     // MainSceneから開始
     startLabel: "main",
   });
   // fps表示
   //app.enableStats();
   // 実行
   app.run();
});

RectangleShape

デフォルト

ソースコード

RectangleShape().addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
いじれそうなもの全部いじったもの

ソースコード

this.rect=RectangleShape({
      width:100,
      height:150,
      padding:100,
      backgroundColor:"yellow",
      fill:"green",
      stroke:"black",
      strokeWidth:20,
      shadow:"red",
      shadowBlur:100,
      cornerRadius:25
}).addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
プロパティの説明
プロパティ名 説明 デフォルト値
width 横幅 64
height 高さ 64
padding CSSとかのpaddingと同じ、図形の周りの空白領域の幅 8
backgroundColor 背景色 ‘transparent’
fill 塗りつぶす色 ‘blue’
stroke 図形を縁取る色 ‘#aaa’
strokeWidth 図形を縁取る線の幅 4
shadow 図形の周りに落とす影の色 false
shadowBlur 図形の周りに落とす影のぼかしレベル 4
cornerRadius 角を丸くする度合い 0

ここで、paddingについて少し説明します。

paddingの範囲に表示範囲が影響を受けるプロパティ

  • backgroundColor
  • stroke
  • strokeWidth
  • shadow
  • shadowBlur

今あげたプロパティは、paddingの範囲外には描画できないので注意!

CircleShape

デフォルト

ソースコード

CircleShape().addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
いじれそうなもの全部いじったもの

ソースコード

CircleShape({
      radius: 100,
      padding: 100,
      backgroundColor:"pink",
      fill:"white",
      stroke:"blue",
      strokeWidth:20,
      shadow:"yellow",
      shadowBlur:100
}).addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
プロパティの説明
プロパティ名 説明 デフォルト値
radius 半径 32
padding CSSとかのpaddingと同じ、図形の周りの空白領域の幅 8
backgroundColor 背景色 ‘transparent’
fill 塗りつぶす色 ‘red’
stroke 図形を縁取る色 ‘#aaa’
strokeWidth 図形を縁取る線の幅 4
shadow 図形の周りに落とす影の色 false
shadowBlur 図形の周りに落とす影のぼかしレベル 4

TriangleShape

デフォルト

ソースコード

TriangleShape().addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
いじれそうなもの全部いじったもの

ソースコード

TriangleShape({
      radius:100,
      padding:100,
      backgroundColor:"red",
      fill:"gold",
      stroke:"white",
      strokeWidth:16,
      shadow:"black",
      shadowBlur:100,
}).addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
プロパティの説明
プロパティ名 説明 デフォルト値
radius 半径 32
padding CSSとかのpaddingと同じ、図形の周りの空白領域の幅 8
backgroundColor 背景色 ‘transparent’
fill 塗りつぶす色 ‘green’
stroke 図形を縁取る色 ‘#aaa’
strokeWidth 図形を縁取る線の幅 4
shadow 図形の周りに落とす影の色 false
shadowBlur 図形の周りに落とす影のぼかしレベル 4

StarShape

デフォルト

ソースコード

StarShape().addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
いじれそうなもの全部いじったもの

ソースコード

StarShape({
      radius: 85,
      padding: 100,
      backgroundColor: "yellow",
      fill: "purple",
      stroke: "green",
      strokeWidth: 14,
      shadow: "brown",
      shadowBlur: 100,
      sides:10,
      sideIndent:0.6
}).addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
プロパティの説明
プロパティ名 説明 デフォルト値
radius 半径 32
padding CSSとかのpaddingと同じ、図形の周りの空白領域の幅 8
backgroundColor 背景色 ‘transparent’
fill 塗りつぶす色 ‘yellow’
stroke 図形を縁取る色 ‘#aaa’
strokeWidth 図形を縁取る線の幅 4
shadow 図形の周りに落とす影の色 false
shadowBlur 図形の周りに落とす影のぼかしレベル 4
sides トゲの数 5
sideIndent トゲのとがり具合 0.38

PolygonShape

デフォルト

ソースコード

PolygonShape().addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
いじれそうなもの全部いじったもの

ソースコード

PolygonShape({
      radius: 45,
      padding: 60,
      backgroundColor: "black",
      fill: "gray",
      stroke: "blue",
      strokeWidth: 10,
      shadow: "white",
      shadowBlur: 100,
      sides: 9
    }).addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
プロパティの説明
プロパティ名 説明 デフォルト値
radius 半径 32
padding CSSとかのpaddingと同じ、図形の周りの空白領域の幅 8
backgroundColor 背景色 ‘transparent’
fill 塗りつぶす色 ‘cyan’
stroke 図形を縁取る色 ‘#aaa’
strokeWidth 図形を縁取る線の幅 4
shadow 図形の周りに落とす影の色 false
shadowBlur 図形の周りに落とす影のぼかしレベル 4
sides 角の数 5

HeartShape

デフォルト

ソースコード

HeartShape().addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
いじれそうなもの全部いじったもの

ソースコード

HeartShape({
      radius: 100,
      padding: 100,
      backgroundColor: "orange",
      fill: "red",
      stroke: "purple",
      strokeWidth: 24,
      shadow: "white",
      shadowBlur: 100,
      cornerAngle: 70
}).addChildTo(this).setPosition(this.gridX.center(),this.gridY.center());
プロパティの説明
プロパティ名 説明 デフォルト値
radius 半径 32
padding CSSとかのpaddingと同じ、図形の周りの空白領域の幅 8
backgroundColor 背景色 ‘transparent’
fill 塗りつぶす色 ‘pink’
stroke 図形を縁取る色 ‘#aaa’
strokeWidth 図形を縁取る線の幅 4
shadow 図形の周りに落とす影の色 false
shadowBlur 図形の周りに落とす影のぼかしレベル 4
cornerAngle 図形を描く時のコーナーの角度 45

PathShape

追記:このクラスについては後日書いた記事がありますので、下記の記事をご覧ください。

[phina.js] PathShapeについて

※注意:こちらのクラスは、私自身まだあまり把握できてませんので、あやふやな説明になりますがどうかご了承ください。

デフォルト

ソースコード

PathShape({
      paths: [Vector2(this.gridX.center(-2), this.gridY.center()),
      Vector2(this.gridX.center(2),this.gridY.center())]
}).addChildTo(this);

こればっかりは、まったくの空っぽでデフォルトとはいきませんでした。

いじれそうなもの全部いじったもの

いじったら、写真が縮小されちゃってて分かりにくいかもしれませんが、640×960の画面の(0,0)のとこから、PathShapeの図形を描いたところ + padding分、backgroundColorが反映されてて、解説しなきゃいけない私自身がこれどうなってるんだろう…と分かってないので、ひとまずはこうなりましたというのだけ置いておきます(^_^;)

ソースコード

PathShape({
      width:100,
      height:200,
      padding:50,
      backgroundColor:"yellow",
      fill:"blue",
      stroke:"pink",
      strokeWidth:20,
      shadow:"green",
      shadowBlur:100,
      paths: [
        Vector2(this.gridX.center(), this.gridY.center(-2)),
        Vector2(this.gridX.center(-2), this.gridY.center()),
        Vector2(this.gridX.center(2), this.gridY.center()),
        Vector2(this.gridX.center(), this.gridY.center(2))]
}).addChildTo(this);
ちょっとよくわからない感じになってしまったので、必要最低限のものに省いて再挑戦

ソースコード

PathShape({
      stroke:"pink",
      strokeWidth:20,
      lineCap:"sqare",
      paths: [
        Vector2(this.gridX.center(), this.gridY.center(-2)),
        Vector2(this.gridX.center(-2), this.gridY.center()),
        Vector2(this.gridX.center(2), this.gridY.center()),
        Vector2(this.gridX.center(), this.gridY.center(2))]
}).addChildTo(this);
プロパティの説明
プロパティ名 説明 デフォルト値
stroke 線の色 ‘#aaa’
strokeWidth 線の幅 4
lineCap 線の端の形 ‘round’
paths 線を描きたい座標。Vector2(x, y)の形で繋いで指定する null

参考にさせていただいたサイト・ページ一覧

とりあえず試してみたいって方のためのphina.js入門
phina.jsの簡単さから基礎知識まで
[phina.js-Tips-Extra-003] ShapeとPathShapeを組み合わせたサンプル
shadowBlurプロパティ – Canvasリファレンス – HTML5.JP
lineCapプロパティ – Canvasリファレンス – HTML5.JP
API Documentation – phina.js docs

Pocket