忍者ブログ
ぼやき用のブログ。主にソフトウェアの使い方覚書など。ときどき絵や音楽を置いたり。
プロフィール
HN:
おねむ
HP:
性別:
非公開
自己紹介:
絵や漫画描いたり作曲したりポリゴンや動画作ったりプログラム組んだりしてる多趣味な管理人です。
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
最新コメント
[11/17 NONAME]
[11/14 灯火]
[10/07 羽琉猫]
05
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



背景描くの嫌いではないんですが
塗るの超絶嫌いです、
しんどいし時間かかるしレイヤーいっぱいになるし。

コピックだとざくざく塗れるんだけどなー。。
塗り分け作業爆発しろ!

てことで背景色テスト



背景塗り終わった後にシャープかけるのが好きです、
フチドリと塗りムラがくっきり出て。



話変わるけど、今日は具合が悪くて寝込んでたんですが
起きた時に目の前が真っ暗になり
体感時間10秒くらい何も見えなくなったので、
その間マジで失明したかと思いました。

自分の手とか目の前にひらひらしても
文字通り真っ暗で輪郭すら見えなくて、
思わず「えっ…?」と声を上げてしもた。

超怖かった……or2
光が戻って良かった。

PR



ブロック崩しゲームのパッケージテスト用に作り始めたはずのパズルゲームが
先に完成しました(笑
こちら試遊版になりますので遊んでみたってください。



実際はステージサイズ700*600になるます。
現在開発終わってテスト中。
リリースしたらまたココに追記しますヽ(´▽`)ノ
FLASHで真円と正方形が重なっているかどうかを調べて、
重なっている場合にTrue、重なっていない場合にFalseを返したいんですが、
「hitTest」メソッドでは、画像は最外値を枠としてしまうので
どうも使えないようです。


↓ 見かけ上重なっていないのにhitTestではTrueが返ります。


百聞は一見に如かず、作ってみた。
(●と■はマウスドラッグで動かせます)



まぁこんなカンジに。
でも個人的には↓



なので、自分で計算式作るしかないのかなぁと思ったワケですが、
2つ方法を思いつきました。
というより、私の脳ミソでは2つしか思いつきませんでしたぁ!!\(^O^)/

(1)円周と正方形の外周の接点があるかどうかを調べて、
  接点が1つ以上の場合Trueを返す。

(2)円周と正方形が接するときの、円心と正方形の中点の距離を求め、
  その距離より円心と正方形の中点の距離が小さければTrueを返す。

(1)の場合、円が正方形にすっぽり収まってしまった場合にも
falseを返してしまうかなーと思うんですが、

(2)の方が計算がメンド臭そうだけど応用が効きそうなので
考えるにやぶさかでないし、(2)の方法をとることにしました。

でも(2)の方法って角度とか求めないといけないような気がする。
えーとarcsinとかarctanとか??
三角関数よく分かんないな。うん。

~次回に続く~
脱線してパズルを作り始めたら簡単に出来たのはいいけれど、
パネル数をテキスト入力する仕様にしてみたら


ActionScript2.0だと正規表現使えないでやんの!!



げぇぇえええありえねぇええええ\((^ρ^))/



どん引きや!!


まぁAS2.0なんて全盛期過ぎてるし
いい加減AS3.0に移行を考えるか、
cが得意じゃないからって何年も敬遠し続けてた
C++あたりでも勉強始めようかしら。。。

現時点では半角数字以外、あるいは0以下の数字を入れると
エラーで固まります。
別に無理やり正規表現的なもの組んでもかまやしないけど
冗長だよなーとかとか。
諦めて決め打ちの選択式にでもする方が楽か。。
ブロック崩しを作る上で、
ブロックの部分を画像にマスクする形で完成~☆
ってつもりで作っておりました。


しかし、実際やってみたところ、
マスクレイヤーにした途端に
マスクレイヤー上のムービークリップ(ブロック群)が
呼び出せなくなってしまいました。


つまるところ、ブロックにボールが当たりもしないし、
消えもしなくなってしまいました_ノ乙(、ン、)_あふーん

多分仕様なんでしょうけど。。。


仕方がないので、画像自体をブロックに分割する方向に
考え方を切り替えます。


と、そんな中船さんが超爽やか素敵ジンを久しぶりに描いてくれました!!!
うひゃひゃー、ジンってこんなにイケメンだっけ!?


――ので、こちらの【画像をタイル状に分割する】方法を記述されているブログを参考に
船さんから頂いたイケジンでこんなん作ってみました。




※分割ボタンで分解されてパズル状になります。


これでブロックも画像で作成できるんじゃまいか!?
・・・と、思う!多分!!


ついでにパズルも作れそうだけど、
正位置吸着とか細かい芸を組み込んでいかないといけなそうなので、
またの機会に。



物理計算は全くやってないがなんとなくそれっぽくなってきた気がする。

ブロック画像いちいち敷き詰めるのがメンド臭いので
スクリプトでテキトーに描画してみた。

一応バーと同じムービークリップ内に
ボール(インスタンス名:ball)と、ブロック群(インスタンス名:blocksPanel)を作って
そのムービークリップ2つに新しくコードを追加しました。

以下ソース。(スペースが全角になってるので、
もしコピペする場合はスペースを半角に直さないとエラーが出ます。)

【インスタンス名:blocksPanel】
onClipEvent (load) {

 //ブロックを置くパス
 var blockPass = "this";
 //マスクするインスタンス名
 var maskLayerPass = "_parent.imgAboveLayer";

 //ブロックのサイズを決めます。
 var blockWidth = 20; //ブロック横幅
 var blockHeight = 20; //ブロック縦幅
 //ブロックの数を、行列で定めます。(決め打ちでもOK)
 //横に置くブロックの数
 var blockNumMaxX = Stage.width / blockWidth;
 //縦に置くブロックの数
 var blockNumMaxY = (Stage.height - 60) / blockHeight;
 //--その他初期値
 var blockInstance = "block";
 var arrBlockFlg = new Array(); //当たり判定フラグ。0のとき未/1のとき済(不可視)
 var drawX = 0;
 var drawY = 0;

 //--ブロックを配置します。
 for(i = 0; i < blockNumMaxX * blockNumMaxY; i++){
  blockInstance = blockPass + ".block"+i;
  //座標取得
  drawX = blockWidth * (i % blockNumMaxX);
  drawY = blockHeight * Math.floor( i / (Stage.width / blockHeight));
  arrBlockFlg[i] = 0;
  //ブロック描画
  eval(blockPass).createEmptyMovieClip("block"+i, i);
   eval(blockInstance).lineStyle(1, 0xff0000);
   eval(blockInstance).beginFill(0xffff00, 100);
   eval(blockInstance).moveTo(drawX, drawY);
   eval(blockInstance).lineTo(drawX + blockWidth, drawY);
   eval(blockInstance).lineTo(drawX + blockWidth, drawY + blockHeight);
   eval(blockInstance).lineTo(drawX, drawY + blockHeight);
   eval(blockInstance).lineTo(drawX ,drawY);
  eval(blockInstance).endFill();
 }
}



【インスタンス名:ball】
onClipEvent (load) {
 //初期位置(x,y)
 _x = Stage.width / 2;
 _y = Stage.height - 60;
 //初速度(x,y)
 speedx = 5;
 speedy = -10;
}
//ボールが動き出します。
onClipEvent (enterFrame) {
 this._x += speedx;
 this._y += speedy;

 //ボールが壁にあたったら跳ね返ります。
 if (this._x < this._width / 2) { //左に当たったとき
  this._x = this._width / 2; //強制位置補正
  speedx = -speedx; //x座標の移動方向反転
 }
 else if(this._x > Stage.width - (this._width / 2)){
  //右に当たったとき強制位置補正
  this._x = Stage.width - (this._width / 2);
  speedx = -speedx; //x座標の移動方向反転
 }
 if (this._y < this._height / 2) {
  //上に当たったとき強制位置補正・跳ね返り //上に当たったとき
  this._y = this._height / 2; //強制位置補正
  speedy = -speedy; //y座標の移動方向反転
 }
 else if(this._y > Stage.height - (this._height / 2)){
  //下に当たったとき強制位置補正・跳ね返り
  this._y = Stage.height - (this._height / 2); //強制位置補正
  speedy = -speedy; //y座標の移動方向反転
 }
 //バーに当たったときの処理
 if (_parent.ball.hitTest(_parent.bar)) {
  _parent.ball._y = _parent.bar._y - 10;
  speedy = -speedy; //y座標の移動方向反転
 }
 //***************************************ブロックに関する処理--!ここから
 // ボールとブロックが当たったとき
 for(i = 0; i < _parent.blocksPanel.blockNumMaxX * _parent.blocksPanel.blockNumMaxY; i++){
  if (this.hitTest(eval("_parent.blocksPanel.block" + i))) {
   // ブロックを非表示に
   eval("_parent.blocksPanel.block" + i)._visible = false;
   _parent.blocksPanel.arrBlockFlg[i] = 1;
  }
 }
}


ブロックを非表示にする部分はfor文でテキトーに制御してしまっているので
ものすごく重いんじゃないかな。
全体的に出来上がったら直そうと思ってます。

あ、そういえばバーもちょっとコード加えて
バーが画面からはみ出ないようにちょこっと改良しました。


【インスタンス名:bar】
//バーの動きのみ設定しています。

onClipEvent (load) {
 //初期位置(x,y)
 _x = Stage.width / 2;
 _y = Stage.height - 40;
}
//マウスカーソルに沿ってバーを動かします。
onClipEvent (enterFrame) {
 if(_root._xmouse < this._width / 2) {
  //左端からはみ出そうなとき
  this._x = this._width / 2;
 }
 else if(_root._xmouse > Stage.width - this._width / 2) {
  //右端からはみ出そうなとき
  this._x = Stage.width - this._width / 2;
 }
 else{
  //通常の動き
  this._x = _root._xmouse;
 }
}
以前、脱出ゲームを作るっていうSerene企画がありましたが
グラフィックの用意がメンドクセっていう理由で企画倒れしました。

ほんで今回船さんが「黒詠さんを脱がせ隊」と言い出したので、
まぁシューティング系コーディングなんてFLASHの初歩だし
ブロック崩しくらい簡単だろ。ほじほじ

ってカンジで安請負いして
今回新たにブロック崩しゲームプロジェクトが立ち上がった。
(とはいえ、さすがに脱出ゲームよりは難しいような気がしてる。)


大体構想は頭の中にあるし、
実際そんなに難しくないとは思うんだけど
よく考えて見ればめんどくさいんじゃないだろうか…?


まぁ物は試しだし?
作ってみるとしようと思う。

…しかし船さんに用意してもらった画像縦長過ぎやしないか?
私のモニタのタテ768pxしかないから開発し辛いんだけど。ぶつくさ


とりあえずベースから用意してみます。
まず板。
マウスのX座標を取得して動かすカンジになると思う。



バーをシンボル化して、ムービークリップに。
そのムービークリップに以下のコードを書き込みます。

onClipEvent (load) {
 //座標初期値(x,y)
 _x = Stage.width / 2;
 _y = Stage.height - 40;
}
onClipEvent (enterFrame) {
 //マウスカーソルに沿ってバーを動かします。
 this._x = _root._xmouse;
}

たったこんだけ。
※バーは原点を画像の中心にしてること前提で書いてます。
◆--SharedObjectに配列を保存したい--◆←サブタイトル

ようやく求めていた方向性にそれなりに形になってきました(・3・)

丸一日費やして300行程度のプログラムしか書けない自分情けない。
目指せ1日1000行。

081117screen

何かSharedObjectに配列(保存すると別のモノになってるっぽいけど)を
保存しようとしたんだけど、

【SOインスタンス】.data.【配列変数】[i] = 0;

じゃできないらしくて、
数字を入れてもnullが返って来てしまうので
(しかも変数にevalとか使えないし)
コレに悩んで小一時間orz
最初は既に別の変数も入れていたので、
てっきり変数を複数保存する事が出来ないんだと思ってたんですが
そうでもないみたいで、

cardNumSO.data["name" + i] = 0;

だったら大丈夫らしい。

でも、気付いてはいたけどコレだと前述した通り
配列じゃなくて、配列に見せかけた変数になってしまうので
あんまりスマートじゃなくて重く感じますネ;;

というのも、
["name" + i]の部分で、name1,name2,…てカンジで
連番の変数を作成してるから
変数が膨大に出来上がってしまうという事態('A`)ウェ
まぁ自分が扱い易ければいいや、
ごめんねローカル(´・ω・`)


それはさておき、ボタンの追加結構面倒くさいなコレ。
懲りすぎたせいでタイムラインが長いのが特に原因な気がします。
まいったなコレ。
Copyright c おねむのこっそり日記 All Rights Reserved
Powered by ニンジャブログ  Designed by ピンキー・ローン・ピッグ
忍者ブログ / [PR]