8日目
こんばんは。
昨日のサッカーのせいで寝不足すぎた。
でも面白い試合だった。
今日は3か月にわたって繰り広げられたクソみたいな新人研修の最終日でした。
ゆるいって理由で今の会社に入ったのに、銀行とか商社相手に研修を行ってる会社の研修を受けてたんすよ。
チョーしんどかった。
いちいち起立!礼!着席!あるし、部屋出るときは一例しなくちゃいけないし。
あとなんだったかな…
班を3つ作るんですけど、最後にそのチームのよかったところと悪いところをそれぞれ評価するみたいなことやってました。
とてもしんどかったです。
さて今日はコードの話です
5日目 - Twitterをやめるまで
ここで話したシューティングゲームの弾と敵すべてに判定を持たせてぶつかったら消えるということをしたいってやつ。
まず、enchantjsではsceneっていう層というか、画面みたいなのに画像を載せるんですね。
game.rootScene.addChild(hantei_shot_chara);
これでhantei_shot_charaという躯体をgameという本体のSceneという画面に追加するんですね。
んで、こいつは配列みたいな形で格納されます。
つまり、Sceneの中の配列に直接アクセスするというか抽出してしまえば、それぞれの判定を引っこ抜けるというわけです。
それを踏まえて、敵キャラの判定に自機の弾が当たったときのイベントのコードをを書きます。
hantei_enemy.addEventListener(Event.ENTER_FRAME, function () { if (this.intersect(hantei_shot_chara_group.childnodes)){ enemy.image = game.assets["effect.gif"]; enemy.frame = 0; game.rootScene.removeChild(this); game.rootScene.removeChild(enemy); } }
説明しておくとintersectってのは重なったらということです。
ちなみにhantei_shot_charaは弾の判定だけのグループ化をさせてます。
var hantei_shot_chara_group = new Group(); hantei_shot_chara = new Sprite(4,16); //中略 hantei_shot_chara_group.addChild(hantei_shot_chara) game.rootScene.addChild(hantei_shot_chara_group);
でもこれだとintersectの引数ではhantei_shot_chara_group.childnodesを拾ってくれません。
なのでif文の前にfor文を使って、hantei_shot_chara_groupの中すべての要素を拾ってもらうようにします。
hantei_enemy.addEventListener(Event.ENTER_FRAME, function () { var all_element; for(var i=0; i < hantei_shot_chara_group.childnodes.length ; i++){ all element = hantei_shot_chara_group.childnodes[i]; } if (this.intersect(all element)){ enemy.image = game.assets["effect.gif"]; enemy.frame = 0; game.rootScene.removeChild(this); game.rootScene.removeChild(enemy); } }
これでそれぞれの弾の判定と敵キャラの判定がぶつかるようにできました。
何かあれば聞いてください。
頑張って説明するので。
明日は勉強しないとな~
早くPC買って家の開発環境整えたいな。
眠い。
おやすみなさい
7日目
こんばんわ。
ほんと休み終わるの早い。
爆速で過ぎていく。
あと2日ほしいな。
そういえば昨日の手話ができるゴリラのココの話、だいぶ賛否両論あるみたいですね。
もともと類人猿は言語習得能力がないという線が強いという研究結果が出ていたり、ココの研究をしていた博士の結果データが少なすぎるみたいな、信ぴょう性の高いデータや映像が残っていないとしてあまり学者たちには信じてもらえていないようです。
gorilla-go-rock.seesaa.net
このへんがいろいろまとめてくれているので興味ある人は見てみてくださいな。
あー今日話したいこといっぱいあるな。
今日は最高の服を着て、最高の気分でした。
昨日高円寺で買ったチェックパンツがめちゃかわです。
こんな感じです。いいでしょ~
さて今日は午後からTwitterで絵を描いてるふゅさんのイベントに行ってきました。
千愛ちゃんの似顔絵を描いてもらった。
マジ可愛い好きらぶ付き合いたい。
今日の特典会で千愛ちゃんにあげてきた。
大切にしてくれよな。
あとDA PUMPのU.S.A.まじでいいwwww
聴いてくれwww頼むwww
頭から離れなくなる。
カーモンベイビーアメリカ!!!!
そういえばTwitterで服装とかアイテムをディスられてブチギレてた子いたけど、ほんとにあれダサいよ。
自分が好きな服なら自分が好きならそれでいいじゃん。
服を自己顕示欲を満たすための道具として使ってるから他人ディスられて怒るんだよ。
そんなの全然服好きじゃない。
服が好きな自分が好きなだけだし、自分が選ぶ服のセンスを褒めてほしいだけ。
だいたいお前はそれを買って着てるだけなんだよ。
本来その服可愛いねとかセンスいいねって褒められるべき対象はデザイナーであって、選んだだけのお前は何も生み出してないから無価値なんだよ。
生み出すことすらしないで自己顕示欲を満たすためだけに頑張ってるオシャレをディスられてキレるとかどこまでダサいんだよ、と。
俺も服好きだけど、周りからどう言われようと関係ないし、好きな服を着ていくだけ。
それができないんじゃ服が主体じゃなくてお前が主体になってるだけじゃんっていうね。
まぁTwitterとかに今日のコーデ~♪とか載せてるやつのミーハー感とか強いじゃないですか。
服というより自分を褒めてほしいみたいな感情の強さとか。
そんな感じ。
だからきちんと言おうぜ。自分のセンスを褒めてほしいから服が好きですって。隠すのやめよう?
明日からまた一週間がんばろうね。
来週の月曜有給取ろうかな~
6日目
ブログ書くの忘れてた。
今日は髪を切って高円寺で最高の服を買って酒を飲んだ最高の1日。
髪と服はTwitterとかインスタに載せる。
予定。
ゴリラのココが死んだってね。
手話ができるゴリラ。
その話をしようと思います。
まずこれがゴリラのココが死について手話で話した内容だそうです。
ソースはTwitterなので信憑性はおいといて鵜呑みにしてくださいな。
これ、すーごい人間が深読みして深読みして動物が死について真理を知っているって妄想を体現してる内容っぽくないですか?
僕は、これ本当に文字通りの意味だとしか思えないんですよね。
まず、ゴリラは死ぬときどう感じるかについて『眠る』と答えてます。
これはたぶん本当にそうとしか捉えてないんだと思います。
たくさん寝てる。もう起きない。その程度にしか感じてない。悲しいとか、辛いとかそういう感情は持ち合わせてない。
じゃあなぜそう考えてると思うのか。
動物には『休み』って概念がないと思うんですよ。
群れで暮らして、群れの中で役割があって、生活そのものが仕事みたいな感じで。
だから人間の社会みたいに、今日は仕事が休みという、役割を休める日ということはない。
ずーっと働きづめってわけです。
だから死ぬことで休みを得る、役割から解放されるというわけです。
そしてずっと眠っていられる。
そういう意味なのではないかなと。
そう考えると『死ぬとどうなる?』という質問に対する『苦労のない 穴に さようなら』という答えにも辻褄が合ってくるのではないかと。
苦労のない→群れの中で仕事をしなくて済む
穴→巣か何か?
さようなら→そこでたくさん眠れる。休める。
こうじゃないかなーと個人的には思います。
動物が死をどう捉えているのか気になる、真実を知っているのではないかという期待も妄想もわかる。
けど、物事を湾曲した捉え方をしすぎるのはよくないかな〜と思います。
たぶん、人間みたいに死に対する考えとかないと思うんですよ。動物は。
なぜなら人間みたいに大多数の命が生きることを約束された世界ではないから。
当たり前に突然死ぬし、殺される。
自然はそういう世界だから、慣れてるんじゃないかなって。
まあ真実はわかりませんが、人間は変に期待や妄想を膨らませてそれを信じる傾向にあります。どんなことも。
事実は小説よりも奇なり、なんて言いますが、大半の事象にそれは当てはまりません。
もっと現実を見ましょう。本質を捉えられるようにしましょう。
そうしてる人間をひねくれてる、夢がない、なんて言わないようにしましょう。
明日はアキバ行きます。
おやすみなさい。
5日目
シューティングゲーム作り終わった〜〜!!!!
最後の最後で解決法を見つけてそこから早かった。
でもたまにプログラミング向いてんのかなあとか思っちゃうな。
まあ、向いてるか向いてないかじゃなくてやるかやらないかだと思うけど。
発表もさささ〜と終わったし気分いい。
コードの話は明日にでも書きます。
そういえば昨日歯が痛くて一睡もできなかった。
ちょー眠い
おやすま〜〜
4日目
疲れました~ 今日は初めて残業かましました。 明日の発表資料ができてないので…
なので今日は早く寝ます。
今日は短め。 シューティングゲームできねー varでの定義づけがうまくいかない。 たぶんaddChildしたあとに、そこから抽出してやればいいんだと思う。 Nodechildとかで。
明日は金曜日 明日終われば休み。 土曜日には髪切るし酒飲みにいくので早く終わってほしい。
おやすみなさい。
3日目
最近キャスやりすぎな。
誰かと話したくなってしまうから仕方ない。
今日もずっとおべんきょでした。
と、その前に避難訓練があったんですけど、雨で外に避難できないから自分のヘルメットの位置と迅速にかぶれるかを確認して終わり。
みんなで一斉にオフィスでヘルメットかぶっただけ。
おわり。
そう、勉強の話ですね。
今日は『HTTPの教科書』ってのを読み終えました。
- 作者: 上野宣
- 出版社/メーカー: 翔泳社
- 発売日: 2013/08/09
- メディア: Kindle版
- この商品を含むブログ (7件) を見る
まぁ、なんですかね。
僕らが使ってるWebがどういうふうにして見れているのか。
その仕組みとか、構築の仕方とかわかりやすかったかなと。
ただ、実際に身に付けるなら、自分でサーバー立ち上げて、一から構築してってしないとすぐ忘れそう。
俺たちが何気に使ってるインターネット、わりとややこしい仕組みで成り立ってます。
シューティングゲームの進捗はうんこです。
今日はかなりうんこ。
弾を撃つところと当たり判定を付けるとこまではいったんだけど
上手いこと敵とぶつけることができない!!!!
コードはこちら。
// 自機の弾のスプライト設定 var hantei_shot_chara; function shot() { var shot_chara = new Sprite(16, 16); shot_chara.image = game.assets['icon.png']; shot_chara.frame = 48; shot_chara.x = chara.x + 8; shot_chara.y = chara.y - 24; shot_chara.addEventListener(Event.ENTER_FRAME, function () { this.y -= 10; if (this.y < -10) { game.rootScene.removeChild(this) } }); // 自機の弾の当たり判定設定 hantei_shot_chara = new Sprite(4,16); hantei_shot_chara.x = shot_chara.x + 6; hantei_shot_chara.y = shot_chara.y; hantei_shot_chara.addEventListener(Event.ENTER_FRAME, function () { this.y -= 10; if (this.y < -10){ game.rootScene.removeChild(this) } }); game.rootScene.addChild(shot_chara); game.rootScene.addChild(hantei_shot_chara); setTimeout(shot,500); } shot(); function enemies() { //敵機のスプライト設定 var enemy = new Sprite(32, 32); //中略 enemy.addEventListener(Event.ENTER_FRAME, function () { if (this.y > 320) { game.rootScene.removeChild(this); } }); //敵機の当たり判定設定 var hantei_enemy = new Sprite(20,32); hantei_enemy.x = enemy.x + 6; hantei_enemy.y = enemy.y; hantei_enemy.tl.moveBy(0, 800, 200); //hantei_enemy.backgroundColor='red'; hantei_enemy.addEventListener(Event.ENTER_FRAME, function () { if (this.y > 320) { game.rootScene.removeChild(this); } if (this.intersect(hantei_chara)) { chara.image = game.assets["effect.gif"]; chara.frame = 0; clearTimeout(); game.end(); } if (this.intersect(hantei_shot_chara)){ enemy.image = game.assets["effect.gif"]; enemy.frame = 0; game.rootScene.removeChild(this); game.rootScene.removeChild(enemy); } }); //中略 game.rootScene.addChild(enemy); game.rootScene.addChild(hantei_enemy); game.rootScene.addChild(shot_enemy); game.rootScene.addChild(hantei_shot_enemy); setTimeout(enemies,1000); } enemies();
これの悪いところはですね、弾が新しいの生成されると弾としての定義が新しい弾についてしまって、古い弾は画像が存在しているだけになってしまうんですよね。
画面上に存在してる弾すべてをちゃんと定義したいんですけど、それをしたらスコープの関係で敵キャラとの当たり判定をつけるのが難しくって。
何が言いたいかというと、var hantei_shot_chara
がfunction shot()
の外に出てるじゃないですか。
この定義をfunction shot()
の中に入れてしまうとスコープの関係で、function enemies()
の中で定義できなくなって、弾に当たったら消えるという動作を上手く実行することができなくなるんですよ。
ていうか当たらなくなる。
逆に外に出しておくと当たることには当たるけど、画面上には1つしかvar hantei_shot_chara
は存在できないから古い方の弾は判定ないままインターネットの海に消えていく。
そこをいい方法ないかなと思って。
明日先輩に聞いてみようかな。
今日はこれで終わり~
誰かと話し出すと止まらなくなるわね。
また明日も頑張ろう。
おやすみ~
2日目
今日は寝坊しました。
がっつりしっかり。
遅くても8:30には家を出ないといけないのに起きたのが8:30
朝から新宿を激走しました。
何とか間に合ったけどね。
まじで午前休使うか迷った。
さて、仕事はですね、課題のゲーム作りしてました。
今日は本当にそればっかりしてた。
ここからはプログラミングの話になるので興味ない人は飛ばしてね。
シューティングゲーム作ってて、今日は当たり判定と敵のランダム生成のコードを主に勉強しました。
使っているのはjavascriptで、フレームワークにはenchantjs使ってます。
まずは当たり判定の話から。
まずはスプライト画像の設定をします。当然だけど。
//敵機のスプライト設定 var enemy = [] for (var i = 0 ; i >=1000 ; i++){ enemy[i] = new Sprite(32,32); //中略 enemy[i].tl.moveBy=(enemy[i], 840000, 30000); }
みたいな感じですかね。
でもこれだと、スプライト画像の見た目の大きさと実際の大きさが合ってるわけではないので、このまま当たり判定のフェーズに行くとは?!当たってねえだろ!が発生します。
どういうことかというと
enemy[i] = new Sprite(32,32);
の部分があるじゃないですか。
これは画像を32×32で切りますよってことなんですけど、実際に画面に出てるキャラは余白が透過してたりしてるので、見た目はきっちり32×32の正方形ではないんですよね。
そこで
//敵機のスプライト設定 var enemy = [] var hantei_enemy = [] for (var i = 0 ; i >=1000 ; i++){ enemy[i] = new Sprite(32,32); //中略 enemy[i].tl.moveBy=(enemy[i], 840000, 30000); game.rootScene.addChild(enemy[i]); //敵機の当たり判定 hantei_enemy[i] = new Sprite(8,32); //中略 hantei_enemy[i].tl.moveBy=(hantei_enemy[i], 840000, 30000); game.rootScene.addChild(hantei_enemy[i]); }
当たり判定の矩形を別に作ってやって、それをスプライト画像に重ねて同じ位置、同じ速度で存在させるってことにしました。
これを自機にも搭載させて
hantei_enemy[i].addEventListener(Event.ENTER_FRAME,function(){ if(this.intersect(hantei_player){ //中略 game.end(); } });
とENTER_FRAMEで終わらせます。
このとき、thisを使わないとfunctionの中の変数iとhantei_enemy[i]の変数iが別物としてカウントされてしまうので注意。
うまく作動しなくなる。
あと、game.end();はnineleapをいれてないと使えないので気を付けてください。
長くなったな、疲れたな。
ランダム生成のところはササッと終わらせます。
まぁ、上のコードを見てくれたらわかる通り、for文で敵機を作成してるんですね。
しかも一気に生成してるので、画面外にいるとはいえ、かなり大量のスプライトが存在してることになる。
これだとリソースを食って仕方がない。
今後、敵機や自機が撃つ弾とかを考慮したら重くてゲームにならない。
そこで使ったのがSetTimeout()ですね。
これで一定時間経つと敵機が生成されるという風にしました。
一応簡略的なコードを。
function enemies(){ var enemy = new Sprite(32,32); //中略 enemy.x = Math.random() * 320; enemy.y = Math.random() * -320; enemy.tl.moveBy=(enemy[i], 340, 300); enemy.addEventListener(Event.ENTER_FRAME,function(){ if(enemy.y > 340){ game.rootScene.removeChild(enemy) } } game.rootScene.addChild(enemy) ; SetTimeout(enemies(),500); }
これでfunction enemies()を500ミリ秒で実行するので、その時間が経つたびにランダムな位置に敵機が生成されます。
当たり判定の矩形も同じように作ります。
ENTER_FRAMEの部分は一定以上進んだらスプライトが消えるように設定してあります。
リソースの節約として。
まぁこのくらいですね。
長くなりました。
金曜日にこれまでの成果発表みたいな場があるのでそこ目指して完成させます。
今日は絶対日付変わる前に寝る。
彼女ほしい。
同棲したい。
結婚したい。
明日はボーナス。
やたーーーーー!
夢で千愛ちゃんに会いたいよおおおおおおおおおおおおおおお
きも
おやすみなさい。