投稿記事

2020年 01月の記事 (25)

[進捗]ダイスプラグイン紹介PV制作/[講座]Spriteで遊ぶ④(親子関係)

一言進捗

ダイスプラグインのヘルプページ整備がようやく終わり、
週末から紹介PVを作ってました。

クオリティよりスピード重視で作業を進めてみましたが、
パーツの使い回しなどを覚えてだいぶAEの操作にも慣れてきた感があります!

AEチュートリアル動画見ながら少しずつパーツを増やしていこうと思いました!

↓[音量注意]いい感じにできた破裂モーションとローワーサード




いつか講座になるかもしれない何か

講座まとめページ

Spriteで遊ぶ④(親子関係)

前回のつづきです。

前回は2つのスプライトを表示して、addChild(),addChildAt()関数を使って重ね順の操作をしました。


今回は、あるスプライトに別のスプライトをaddChildで子要素として追加した場合の親子関係についてみてみます。

Game_Interpreter.prototype.spriteTest = function(){
	/* 1つ目のスプライト(アイコンID50)を生成
	===================================*/
	var iconId = 50;
	var sprite = iconSprite(iconId);

	//シーンに貼り付けて位置とスケールを調整
	SceneManager._scene.addChild(sprite);
	sprite.x = Graphics.boxWidth/2;
	sprite.y = Graphics.boxHeight/2;
	sprite.scale.set(1,1);


	/* 2つ目のスプライト(アイコンID20)を生成
	===================================*/
	iconId = 20;
	var sprite2 = iconSprite(iconId);

	//spriteに貼り付けて位置とスケールを調整
	sprite.addChild(sprite2);
	sprite2.x = 0;
	sprite2.y = 0;
	sprite2.scale.set(1,1);
};

前回のコードと違う部分は、sprite2をspriteに対してaddChildで追加してる点と、
sprite2のx,yを0、scaleも等倍の1のままにしている点です。

さて、表示結果は↓


1つしか表示されていない……のではなく、sprite2が1つめのspriteとぴったり重なっています!

sprite2は親であるスプライトであるspriteと全く同じ位置にあり、
sprite2のx、yともに0としているので、つまりsprite2は親の位置が基準となっているということです。

見やすいようにsprite2.x = 32;としてアイコン1つ分だけ右にずらしておきます。


さて、次に親であるspriteの位置と大きさを変化させてみます。

まずは、sprite.x+=32;を最後に加えてxをアイコン1つぶん右にずらしてみます。



キャラとのずれで分かると思いますが、spriteとsprite2が両方とも右にずれたのが分かると思います。

このように、addChildで子要素として追加したスプライト(sprite2)は親スプライトと連動して動きます。

スプライトの位置を戻してsprite.scale.set(2,2);とスケールを2倍にすると……



やはり子要素であるsprite2も一緒に2倍に拡大されました!



このように、複数のスプライトを親子関係で配置すると、
まとまって位置や大きさを調整することができて便利!

……という話でした!



これでSpriteの基本については終わりです。

いろいろとやってきましたが、

「スクリプトでわざわざやらなくてもピクチャでいいじゃん」

と思われるかもしれません……




「まったくそのとおりです!!」


おい!……と思われるかもしれませんが、実際ツクールのピクチャは優秀です。

さらに、今まで表示させてきたアイコンのスプライトですが、
メニューを開いて閉じると綺麗に消えてしまいます……無慈悲💧


シーンが変わったり、セーブ&ロードをしてもスプライトを表示させ続けるにはシーン開始時にスプライトの状態(表示してる画像や位置など)を復元しなければなりません。

そして、復元させるにはどこかでスプライトの状態をデータとして保持する必要があります。もちろんシーンが変わっても残り続ける形で。


その点、ピクチャはコマンドで1度表示すればシーンが変わってもセーブ&ロードを行ってもちゃんと表示されるように設計されています。


このようにピクチャは手軽で優秀なのですが、ピクチャで自作システムを作ったことがある方は分かると思いますが、ピクチャ番号を管理するのが大変です・・・。

今回紹介した親子関係というのもピクチャには無い概念ですが、
複数の画像を同時にアニメーションさせたりする際には非常に有効。

↓UI画像は全てスクリプトでSpriteを生成して管理してます。フィールド画面でUIパーツのSpriteは40以上……


Sprite周りの講座はしばらく続けてみようと思いますので、「自作UIを作ってみたい!」という方は一緒にSpriteの使い方を学んでみてはいかがでしょうか?

(といいつつ、しばらくダイスプラグインの使い方紹介記事を書くと思うので、講座は少しの間お休みになるとオモイマス……m(_ _)m)

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

[一言進捗]/[講座?]Spriteで遊ぶ③(重なり順について)

一言進捗

今週は、サボってた訳じゃないですが目に見える進捗が少なかったです…。
https://twitter.com/thiropGames/status/1215945464480092160


というより、ダイスプラグインの整備がですね……

たぶん立ち絵プラグイン(TRP_Skit)の半分くらいの値段で出す予定なんですが、チートシートに乗せるプラグインコマンド数とかヘルプのページ数とかも立ち絵プラグインのときを超えちゃってます……

うーん、もうちょっと作業量とかもろもろを考えて仕様考えるべきでしたね😰

まぁ、次回からの課題ということで!


というわけで、もう少ししたらダイスプラグインのヘルプページを大量に投稿すると思います。うるさいかもしれませんがご容赦をm(_ _)m
(本当はブログとかに用意すればよいのだけどci-enで記事書くのが圧倒的に楽!)


いつか講座になるかもしれない何か

講座まとめページ

Spriteで遊ぶ③(重なり順について)

前回の続きです。

少し間が空いちゃいましたが、function iconSprite(iconId)という関数を作ってアイコンIDを指定してスプライトを用意できるようになりましたね!

次のスプライトのパラメータを説明するためにと大それた準備をしましたが、特に大したことは解説はしませんのでサクッと進めてきます!


Spriteの重なり順

前回用意したiconSprite関数を活用してアイコンIDが50と20のスプライトを2つ用意してみます。

Game_Interpreter.prototype.spriteTest = function(){
	/* 1つ目のスプライト(アイコンID50)を生成
	===================================*/
	var iconId = 50;
	var sprite = iconSprite(iconId);

	//シーンに貼り付けて位置とスケールを調整
	SceneManager._scene.addChild(sprite);
	sprite.x = Graphics.boxWidth/2;
	sprite.y = Graphics.boxHeight/2;
	sprite.scale.set(1,1);


	/* 2つ目のスプライト(アイコンID20)を生成
	===================================*/
	iconId = 20;
	var sprite2 = iconSprite(iconId);

	//シーンに貼り付けて位置とスケールを調整
	SceneManager._scene.addChild(sprite2);
	sprite2.x = Graphics.boxWidth/2;
	sprite2.y = Graphics.boxHeight/2;
	sprite2.scale.set(1.5,1.5);
};

1つ目のスプライトはスケールを1にセットしており、2つ目のスプライトは1.5にセットしています。

さぁ、どう表示されるでしょうか?

アイコンが1つしか見えませんね!

つまり、スケールが大きい2つ目のアイコンが手前に来てしまって、1つ目の小さいスプライトが裏に隠れてしまっているというわけです。


スプライトの重なり順は、後にaddChildされるほど上に表示されます。

ですので、1つ目のスプライトをシーンに追加したSceneManager._scene.addChild(sprite);のコードを一番最後の行に追加してみると?

ちゃんと1つ目の小さなスプライトが上に重なって表示されましたね!

このように、すでにaddChildしているスプライトを再度addChildしてもエラーになったりはしないので雑に重ね順を調整できます。


ただ、一番上ではなくてあるスプライトとあるスプライトの間に表示したい、といったニッチな状況があるかもしれません。

その場合は、addChildAt()という関数を使った少しだけ面倒な処理となります。


といっても、やり方を分かっていれば簡単です!

今回は1つ目のスプライトを2つ目のスプライトのすぐ上の順番に表示したいとします。

正解のコードは↓

var parent = sprite2.parent;
var index =  parent.children.indexOf(sprite2)+1;
parent.addChildAt(sprite,index);

1行目でスプライト2の親(parent)を取得しています。
SceneManager._sceneにaddChildしているので、これが親になります。

.parentでアクセスすると親が分からなくても良いので便利です。


addChildされたスプライトは親(parent)のchildrenという配列に順番に追加されます。

この配列に対してindexOf(対象の子要素)という関数を用いることで、sprite2がchildren配列の何番目であるかというインデックスを取得しています。

さらに、後に追加されるほど=配列の後ろにあるほど手前に表示されるので、今回はsprite2の1つ手前=配列内の1つ後ろの位置に追加するために+1としています。

そして最後にaddChildAt関数で1つ目のスプライトを計算したindexの位置に追加しています!




……うーん、書いてみて思ったけど、今回の内容はちょっとニッチだったかも?

ただ、次回はスプライトの親子関係について書く予定で、
その時に今回の知識があればちょっとだけ理解が楽かも?

それではまた!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

[一言進捗]マスの移動と演出

今日は一言進捗のみです!

一言進捗

マスの移動まわりの処理を仕上げました!

  • 経路に沿った移動
  • 移動時の演出
  • 経路を逆流する場合の残りステップ数の勘案

目に見えない地味な部分のロジックはチェックしづらいので
実装するのが大変ですねぇ……

明日は、町やはぐれダンジョンの情報表示を作る予定です!

(町といっても、場所によって使える施設が違うので、
それをアイコンでチェックできるようにする感じです。)

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

[一言進捗]/[講座]Spriteで遊ぶ②(opacity,rotation,関数化の秘訣)

こんばんは〜
みなさん初夢はいかがでしたか?

自分は割と悪夢でしたねー(まぁ、だいたい毎夜ですが)
中学の頃の友達と言い争いをしたり、スノボで猛スピードで壁と激突したり……

無理やり良さそうな部分を上げてみると……

https://twitter.com/thiropGames/status/1212493066168201217

あれ、意外と悪くない?
だいたい悪い部分が印象に残ってしまって悪夢が多く感じるのかな?

初夢は今日の夜に見る夢、という説もあるので
今夜もう1回トライ(?)ですね!

もちろん良かった方採用で!


一言進捗

今日はあまり作業できてないですが、
マスと経路の表示機構とドラッグ操作でのスクロールを実装しました。

マスと経路の画像は画面内に入ってるもののみにSpriteを与えて表示させる仕組みなので、もっと広いマップでも問題ないはず。

マスをタッチすると、移動できる場合は移動して情報表示、
移動できない場合は近づけるだけ近づいて情報表示といった機構になるので
明日はそれを実装する予定。

できれば経路の線に沿った角度で移動してほしいので、
Game_Characterを改造する必要がありそうです。

上級者向け補足

マス間の経路はTilingSpriteを使用してますが、
破線じゃなくて直線であれば単に短い線のスプライトを距離に応じて
引き伸ばしてあげればできますね。

マス間の距離は平方根の関数を使用して

var dx = (マス1.x-マス2.x);
var dy = (マス1.y-マス2.y);
var delta = Math.sqrt(dx*dx+dy*dy);

ローテーション(回転)はatan2(dy,dx)でOKです。
dyとdxの順番に注意です!



いつか講座になるかもしれない何か

講座まとめページ

Spriteで遊ぶ②(opacity,rotation,関数化の秘訣)

前回の続きです。

フォロワー以上限定無料

opacity(不透明度)、rotation(回転)、関数の作り方の秘訣

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

[進捗]フィールドシーン制作開始!/[講座]Spriteで遊ぶ(x,y,scale,anchor)

あけましておめでとうございます!

昨夜は平常運転で23時には寝て、今朝6時に目を覚ましました!

年末特番は何も見てませんがアマプラでヴィンランド・サガの最終話を見て
深い感動に包まれて心地よい眠りにつけました。

本当に名作。

アシェラッドかっこよすぎて涙腺緩みっぱなしでしというのもありましたが、
個人的には最後のナイフの演出がしびれた!

前々から、小物を使った伏線や演出がうまくなりたいなぁと思ってたので
パクっ参考にして活かしていきたいたい所存!



進捗

フィールドパートの制作開始!

ダンジョンゲーの探索パートがまだ終わったわけではないのですが、
諸事情で今日からフィールドパートの制作に入りました。

↓とりあえずUIパーツを表示するとこまで。(縦長動画失礼)

フォトショ作っていたUIレイアウトをひたすらツクールに取り込んで
表示するだけなので、ここまではサクサクですね。

明日からは各マスや通路の表示を実装してきます。(↓レイアウト参考)
https://twitter.com/thiropGames/status/1187370828951965696

マスはイベントでそのまま表示しようかとも思ったけどそれなりの数になるので、
面倒だけど内部でスプライトを使い回すようにする予定。



それにしても、ネクラさんのワールドマップチップ素材集があって本当に助かりました。ティルトシフトフィルターかけるとミニチュア感が最高ですね!

(UIパーツもいつも使ってるオーナメント素材セットなどをフル活用してます。素材作者様には足向けて寝れねぇですよ)




いつか講座になるかもしれない何か

講座のまとめページ

Spriteで遊ぶ(x,y,scale,anchor)

フォロワー以上限定無料

無料プラン限定特典を受け取ることができます

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

1 2 3 4 5 »

月別アーカイブ

記事を検索