神代クロ のすべての投稿

ゲーム開発37:フェードイン・フェードアウト

友人に更新が少ないって言われた>挨拶
---

画面切り替え時のフェードイン・フェードアウトを作成しました。これまでもあったんだけど、CGraphicsクラスに入れて全ゲームモードで使い回せるようにしました。

フェードのやり方は色々あると思うけど、俺は一番手前に画面全体を覆う白いスプライトを用意して、それの透過値を変えることで実現してます。

いちいち初期化するのも面倒なので、FadeMove()を呼んだらその中で初期化もループ動作も行ってます。例によって即値が入ってたり、無駄な処理があっても気にしない。

絵を描いたりボスキャラ組んだり、まだやることはたくさんあるな。

//—————————————————————————–
enum {
 FADE_IN,
 FADE_OUT,
 FADE_BLACK,
 FADE_WHITE
};

struct Fade {
 float cnt;  // 移動量
 float now;  // 現在の値
 int  color;  // 色
 int  spr_no;  // スプライトNo
 BOOL complete; // 完了フラグ
};

//—————————————————————————–
// フェード動作
// in_out:フェードインかフェードアウトか
// minutes:フェードする秒数
// color:切り替わる色
BOOL CGraphics::FadeMove(int in_out, float minutes, int color)
{
 RECT workRect;

 // 初期化
 if (fade.spr_no==-1) {
  // フェード用画像登録
  SetRect(&workRect, 0, 0, 47, 47);
  fade.spr_no=CreateSprite("data\graph\status.png", workRect);
  fade.now=1.0f;
  fade.complete=TRUE;
 }

 if (fade.complete) {
  // フェード開始
  if (in_out==FADE_OUT) {
   fade.cnt=1.0f/((float)minutes*60.0f);
   fade.now=0.0f;
  }
  else {
   fade.cnt=-1*(1.0f/((float)minutes*60.0f));
   fade.now=1.0f;
  }
  fade.color=color;
  fade.complete=FALSE;
 }
 else {
  // フェード中
  fade.now+=fade.cnt;
  if (fade.now>=1.0f && fade.cnt>0) {
   fade.now=1.0f;
   fade.complete=TRUE;
  }
  if (fade.now<=0.0f && fade.cntFadeMove(FADE_IN, 0.8f, FADE_WHITE)) {
 // フェード完了後の処理
 ………
}
// みたいにして置いておく

打ち合わせに行く

久しぶりに打ち合わせ行ってきました。

新規の数社と打ち合わせしたんだけど、そのうちの1社は勢いのある会社でした。社長がとにかく即断即決。デモを見たら「わかりました。では契約書を送ります」とその場で成立。「数週間後に説明会開いて年内に開始しましょう」と、トントン拍子で話が進みました。

儲かってる所はスピードが違うね。そういえば知人の儲かってる社長さんも、ワンマン気味だけど、すぐに決めてどんどん進めていく人だった。失敗もするけど、数をこなして成功を増やしてる感じかな。

こういう良い所は見習わないとなぁ。

親の見舞いに行く

親が入院したので、帰省して見舞いに行ってきました。

先週手術したのですが、まだ予断を許さない状態です。現在集中治療室にいて、親族のみ、2人ずつ、30分だけという条件で面会できました。

人工呼吸器が取れたばかりなので、身動きはおろか会話もほとんど出来ない状態でした。良くなる事を祈るしかないですね。

ゲーム開発36:坂道の当たり判定2

当たり判定を全面的に作り直しました。

これまでは「壁に当たったらそれ以上動かない」という処理をしていました。これは簡単に計算できるのですが、移動量が大きいと壁に近づけない、壁に埋まると動けなくなるという欠点がありました。それの対策のために色々と条件式を詰め込んだら、それなりに動くようになったものの、ソースがぐちゃぐちゃになったり。まぁ俺の組み方が悪いんだろうけど。

今回は「壁に埋まったら戻す」にしました。これならとにかく壁に体当りして、埋まってしまったらその分戻すというだけなので、ややこしい計算はいりません。これならラクチンだと思ったのですが…複数の物体にぶつかった際に、どこにどれだけ戻せばいいのかわからない。

これに関してはあまり深く考えずに、複数当たっていても1個ずつ処理していく事にしました。このやり方には欠点があって、処理する順番によって結果が変わる可能性があるんだけど、今のところおかしく見えないからいいか。

…といった前提があって、ようやく坂道の処理です。上記の方法では、当たった場合にどれだけ戻せば良いかを計算する訳ですが、坂道の場合、横から当たろうが上から当たろうが、当たったら必ず上方向に戻します。

下記CheckHitSlope()ではキャラクタの右下と左下の点で坂道と当たっているかを計算し、当たっていたら戻りの大きい方を実際に使う値として返しています。slopeを変えることで上り坂も下り坂も、急な坂もなだらかな坂もこの関数で計算出来ます。ちょっと効率が悪かったり、intとLONGが混在してたりするのは気にしないw

思った以上に当たり判定作り直すのに時間かかってしまったので、スケジュール的にやばくなってきました(汗)

//—————————————————————————–
// 当たり判定(坂)
// charaRect:キャラクタの矩形
// myRect:坂道の矩形
// slope:坂道の傾き
// *ret_x:X方向に戻す値
// *ret_y:Y方向に戻す値
// 戻り値:接地したか
//—————————————————————————–
int CField::CheckHitSlope(RECT charaRect, RECT myRect, float slope, int *ret_x, int *ret_y)
{
 int  ret=FALSE, work_y=0;
 LONG top=0, left=0, right=0;

 // 左下の高さと戻す量
 if (myRect.left<=charaRect.left && charaRect.lefttop) {
   left=top-charaRect.bottom;
  }
 }
 // 右下の高さと戻す量
 if (myRect.left<=charaRect.right && charaRect.righttop) {
   right=top-charaRect.bottom;
  }
 }
 // 戻す量の大きい方を使う
 if (left>right) {
  work_y=right;
 }
 else {
  work_y=left;
 }

 // 接地している?
 if (work_y<0) {
  ret=TRUE;
 }

 *ret_x=0;
 *ret_y=work_y;

 return ret;
}

JCBザ・クラスを取得する

JCB THE CLASSを取得しました。黒いクレジットカードです。

去年に引き続き今年もザ・クラスのインビテーションが来てたんですよ。去年は放置したんだけど、今年は何となく申し込んでみました。そしたら何事も無くカードが届いたよ。

調べたら、今年の夏くらいから結構ばらまいてるみたいだね。昔は物凄く審査基準が厳しかったみたいだけど、今は俺みたいな不安定な職の人間にも配るんだなぁ。

まぁ、これまで通りAmazonで買い物するくらいにしか使わないんだけどね。

USB液晶ディスプレイでマルチモニタ

前に取引先に行った時、そこのPCのほとんどが液晶ディスプレイ2枚置いてマルチモニタ化してました。使わせてもらって便利だなぁと思ったけど、ウチの部屋では置く場所がない。

そんな訳でUSBで繋がる小さな液晶ディスプレイを買ってみました。こういうの2年くらい前に流行ってたよね。2年くらい前に見たわ。当時はサイズが4インチくらいだったけど。

買ったのはI-O DATAのLCD-USB10XB-Tです。10.1インチ(1024×600)でタッチパネルになってます。普通にノートPCサイズだから、これ単体でも作業できそうだね。俺はアプリの横幅をどれも1000ピクセルくらいにしてるから、そのまま持ってこれます。

実は最初電源入れた時、メインの液晶に比べて発色が悪いんで、失敗したかなぁと思ったけど、どうも視野角が狭いせいで位置によって極端に色見が変わるみたい。写真ではプリンタの上に載せてるけど、下に置いた方が綺麗に見えるかも。まだ位置調整中。

俺は10個くらいアプリ起動したまま作業する事が多いんで、ウィンドウをそれぞれに分散出来るのは良いです。あとデータとデータの比較がやり易くなるな。

色々試してみます。

迷惑電話対策にナンバーディスプレイを導入する

このところ迷惑電話がかかってきてムカツクので、ナンバーディスプレイを導入して拒否することにしました。

迷惑電話というのは不動産の営業です。数カ月おきくらいに「先週お宅を訪問して留守だったので」という決まり文句から始まり、いつも同じ内容の電話をかけてきます。ちなみに俺は自宅作業で日中ずっと家にいるけど、誰も来てないぞ。

断ったり電話切ったりすると怒り出して喚き散らす。しかも1日何回もかけてくる。こんなやり方でマンション買う奴なんていないだろ常考…

ナンバーディスプレイですが、116に電話したら「3~4時間で設定完了します」との事。申し込み1時間後に試してみたら、もう使えるようになってました。早いね。料金は工事費2100円、月額420円です。

電話機に非通知拒否があるのでそれを設定。前に調べたら非通知でかけてきてたので、これで拒否できます。もし番号通知でかけてきても30件まで拒否登録出来るので、まあ大丈夫でしょう。

これで一安心かな。

コミケ79受かりました(3日目東マ-31b)

コミケ受かりました。3日目の同人ソフトジャンルでです。配置は以下のとこ。

12/31(金) 東マ-31b

今回は今まで制作してた横スクロールアクションゲーム「緋袴きりり(仮)」を完成させるつもりで頑張ります。当初の想定よりかなり小じんまりとしたものになると思いますが(汗)

しかし大晦日か…

渋谷で打ち合わせと飲み

今日は渋谷で打ち合わせしました。広告代理店の人とかと打ち合わせです。なかなか魅力的な企画だったけど、スケジュールきついので果たしてどうするか。

その後、近くの居酒屋で飲みました。ここでも幾つかの新規案件について話し合ったけど、まぁ全部は出来ないから、どの案件をやるべきかちゃんと見極めないとね。

そうそう、居酒屋で食べた馬刺し美味しかったですw

Photoshop Elements 9を購入

今月1日にAdobe Photoshop Elements 9 日本語版が出てたんで買いました。Photoshop買うのは初代Elements以来の実に9年ぶりです。

まぁ画像加工なんてクライアントから貰ったデータを切り出して縮小する程度にしか使ってなかったから、別に初代でも問題なかったんだけどね。でもさすがにサポート切れてるだろうし、時代にも即してないなぁと思ったんで、1万円ちょっとだし買ってみた。

しかしいざ起動してみると、インターフェースが全然違うな(汗) 基本的な機能は初代と同じみたいだけど、カラーパレットの場所とかがわからず苦労したり。カラーパレットじゃなくてスウォッチって言うんだね。

とりあえず今までと同じ事は出来るようになりました。後は新機能をちまちまと試していこうと思います。

お絵かきも最近してないなー