<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Memories</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/" />
    <link rel="self" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/memories/atom.xml" />
   <id>tag:www.ausystem.org,2011:/~aushacho/memories//1</id>
    <link rel="service.post" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1" title="Memories" />
    <updated>2011-02-15T07:31:01Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type  3.2-ja</generator>
 
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(11)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/02/aimsstg11.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=497" title="AIMSでグラディウスっぽいSTGを作る(11)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.497</id>
    
    <published>2011-02-15T04:34:27Z</published>
    <updated>2011-02-15T07:31:01Z</updated>
    
    <summary> drawGraphicList()を使うことでグラフィックチップを帯状に変形さ...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        <![CDATA[<img alt="list1.gif" src="http://www.ausystem.org/~aushacho/memories/images/list1.gif" width="363" height="252" />
drawGraphicList()を使うことでグラフィックチップを帯状に変形させて表示することができます。
この画像のような誘導レーザーっぽいものを表現するのに向いた機能です。

しかしながら当たり判定矩形の配置方法が通常のグラフィックチップとは違うようなので調べてみました。

通常のチップはアクターの回転や拡大に応じて当たり判定の大きさや位置も変化します。
ただし45度回転させても矩形がひし形になったりはしません。（詳細はAIMS本 P.67）

帯ポリゴンに関しても基本的にはそれに従っているのですが、
原点の位置や初期角度の違いが影響して、おかしく見えるようです。

<img alt="list2.gif" src="http://www.ausystem.org/~aushacho/memories/images/list2.gif" width="400" height="240" />
帯ポリゴンに使用する画像は縦に分割されるため、縦長にしておく必要があります(1参照)。
これに当たり判定矩形を設定するには2の位置にするのが自然でしょう。
ところがそのつもりで矩形を設定してゲーム内で表示すると3の位置に当たり判定が発生します。

3の状態は元画像と同じ方向を向いているので回転していないように見えますが、
実はアクター、帯ポリゴンともに270度回転させた状態です。
回転していない場合は4のように右向きになります。

なお、この時のアクターの原点は5のあたりにあります。

ということで、矩形を帯ポリゴンの中に設定したい場合は、
見た目よりも左にしなければならないようです。
具体的に何ドットなのかまではまだはっきりわかっていません。]]>
        
    </content>
</entry>
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(10)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/02/aimsstg10.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=496" title="AIMSでグラディウスっぽいSTGを作る(10)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.496</id>
    
    <published>2011-02-02T11:27:24Z</published>
    <updated>2011-02-02T12:08:38Z</updated>
    
    <summary>もうAIMSならではのコーディングが必要なところが少なくなってきました。 とりあ...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        <![CDATA[もうAIMSならではのコーディングが必要なところが少なくなってきました。
とりあえず以前やったマップチップとの当たり判定についてです。

以前のものはマップチップ番号が0か、それ以外かで判定していました。
これを例えばチップ番号16番以下は当たり判定なしとすれば
すり抜けられる背景を実現できますが、当たり判定の境界となるチップ番号を
固定にするとチップ作成の自由度が減りますし
可変としても、やはりすり抜け可能なチップを左に集める必要がありますし、
値をいくつにしたかという情報が必要になります。

と、いうことでこれらを解決する手段の一つとして
当たり判定情報を別のマップデータとして用意する方法を試してみます。

<img alt="sample5.jpg" src="http://www.ausystem.org/~aushacho/memories/images/sample5.jpg" width="528" height="272" />
AIMSで用意されているマップエディタはレイヤーを作成することができ
それぞれに別のマップチップ画像を割り当てられます。

<img alt="sample6.jpg" src="http://www.ausystem.org/~aushacho/memories/images/sample6.jpg" width="197" height="136" />
これで見た目と当たり判定の情報を完全に分離することができます。
もちろんデータ量は2倍になるわけですが気にしないことにします。


このようなレイヤーを持ったデータをfmf形式で出力すると
lua側では地形データが mapchip.data[0] に、当たり判定データが mapchip.data[1] に
格納されます。

当たり判定データも mapAllocate() で lua に渡してもいいのですが
表示には使わないにもかかわらずレイヤーをひとつ占有してしまうので
オススメできません。
そのまま配列として扱うのがいいでしょう。

以前は mapRead() でチップ番号を読み取っていましたが
そのかわりにインデックスを自分で計算して参照位置を決めます。
mapRead(x, y)
  ↓
mapchip.data[1][x + y * mapchip.mapWidth]
]]>
        
    </content>
</entry>
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(9)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/01/aimsstg9.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=495" title="AIMSでグラディウスっぽいSTGを作る(9)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.495</id>
    
    <published>2011-01-28T12:20:02Z</published>
    <updated>2011-01-28T12:52:58Z</updated>
    
    <summary> 今回はゲームオーバーの作り方です。 これはゲーム次第で全然違ってくるところです...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        <![CDATA[<img alt="sample4.jpg" src="http://www.ausystem.org/~aushacho/memories/images/sample4.jpg" width="320" height="240" />
今回はゲームオーバーの作り方です。
これはゲーム次第で全然違ってくるところですから、ひとつの例ということで。

最後の自機が死んだら、爆風が消えた後静止して
「GAME OVER」の文字を出すという仕様にします。

静止させる方法はAIMS本の5-3「複数シーンの並列動作と一時停止」が
とても参考になります。

setSceneFreeze()でシーンを停止させることができます。
これによってそのシーンに属するアクターやスレッドも止まる
(画面表示だけは行われる)ので、停止させるのは簡単です。

停止を再開させるためには並列動作するシーンが必要になるので
setSceneFreeze()の前にaddScene()で gameoverシーンを起動します。

gameoverシーンではcreateTextActor()で文字表示アクターを作成します。
ここで作成したアクターはsetSceneFreeze()の影響を受けずに動作するようです。
OnStepではボタンが押されるまで待ちます。

ボタンが押されたらフリーズを解除し、changeScene()でフリーズを解除したシーンを
タイトル画面のシーンに切り替えます。
そして自分自身をcloseScene()で終了させます。
ここではフリーズしているシーンを操作する必要があるので
グローバル変数などでシーンIDを保持しておかなければなりません。

<pre>
function game_OnStep()
  if 自機が死んだ then
    setSceneFreeze(V.scene, true)
    addScene("gameover")
  end
end

function gameover_OnStart()
  createTextActor(G.font, "GAME OVER", 320, 240,
    LAYER_INDICATOR, 255, 255, 255, 255, ALIGN_CENTER)
end

function gameover_OnStep()
  if getJoyPressCount(0, BUTTON_TRIG1) == 1 then
    setSceneFreeze(V.scene, false)
    changeScene(V.scene, "title")
    closeScene()
  end
end
</pre>
]]>
        
    </content>
</entry>
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(8)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/01/aimsstg8.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=494" title="AIMSでグラディウスっぽいSTGを作る(8)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.494</id>
    
    <published>2011-01-26T01:06:57Z</published>
    <updated>2011-01-26T02:20:50Z</updated>
    
    <summary>そろそろ自機が死ぬようにしたいのですが そのためにはシーンをちゃんと作らないとい...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        <![CDATA[そろそろ自機が死ぬようにしたいのですが
そのためにはシーンをちゃんと作らないといけません。

普通はゲームオーバーになったらタイトル画面に戻ります。
タイトル画面は独立したシーンとして作るのが普通です。
よってシーンを作る必要が出てくるわけです。

公式サンプルのSUiCA32ではサークルロゴ表示をひとつのシーンとして用意し
そこでデータの読み込みをしています。
読み込み自体はローダースレッド内で行い、メインスレッドはそれが終わるのを待ちます。

時間がかかるような大きなファイルの読み込みをメインスレッドで行うと
AIMSが応答なしになってしまうので、この形が推奨されています。

SUiCA32では"LOADING"の文字を表示するためにPXFというアクタークラスが使われていますが、
AIMS1.40にはcreateTextActor()で同等の機能を持ったアクターが使えるので
そっちを使うと楽です。

createTextActor()の引数を見ると、一つのアクターで表示できる文字列は
固定のように思えるかもしれません。
しかし、setActorString()という関数が用意されているのでこれを使えば
いつでも好きなだけ書き換えが可能です。

実際、スコアの表示にも使っていますし。こんな感じで。
<PRE>
function score_OnStep()
    setActorString(string.format('1P %8d  HI %8d', getScore(), getHiScore()))
end
</PRE>

そんなわけでテキストアクターを使うこと以外は
SUiCA32そのままでいいと思います。]]>
        
    </content>
</entry>
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(7)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/01/aimsstg7.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=493" title="AIMSでグラディウスっぽいSTGを作る(7)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.493</id>
    
    <published>2011-01-16T08:11:44Z</published>
    <updated>2011-01-16T10:08:40Z</updated>
    
    <summary> 適当に地形を作って、ミサイルがそれに沿って進むようになりました。 画像ではミサ...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        <![CDATA[<img alt="sample3.jpg" src="http://www.ausystem.org/~aushacho/memories/images/sample3.jpg" width="320" height="240" />

適当に地形を作って、ミサイルがそれに沿って進むようになりました。

画像ではミサイルが地面から離れて見えますが
これはマップチップ番号が0以外の場合は全て当たり判定を持つようにしているためです。
チップのほとんどが透明であっても判定があるので。

ミサイルの挙動は、
  1.落下中かつ、ひとつ下のチップに判定があるなら、水平移動に遷移
  2.水平移動中かつ、ひとつ下のチップに判定がないなら、落下中に遷移
となっていて、これをミサイルのOnStep()に記述します。

ミサイルは段差を乗り越えたりはしないので
水平移動中に前方にある地形と接触したら消えなければいけませんが、
これはマップチップ側の当たり判定ロジックがやってくれます。


マップチップが動かない場合(スクロールを除く)は、ここまでで十分なはずです。
が、ミサイルが上を滑っていくような敵(グラIIのホッピングモアイとか)や
背景が動く場合(グラII最終面カニ前のせり上がる床など)には対応できません。

このへんも何とかしたいところです。]]>
        
    </content>
</entry>
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(6)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/01/aimsstg6.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=492" title="AIMSでグラディウスっぽいSTGを作る(6)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.492</id>
    
    <published>2011-01-13T12:52:41Z</published>
    <updated>2011-01-13T14:30:29Z</updated>
    
    <summary>今回は公式で配布されている SUiCA32 を改造して、地形との当たり判定を実装...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        <![CDATA[今回は公式で配布されている SUiCA32 を改造して、地形との当たり判定を実装します。

AIMSにはマップチップの描画機能が用意されているので表示はそれを使いますが、
当たり判定は完全に自前でやることになります。

<img alt="editor.jpg" src="http://www.ausystem.org/~aushacho/memories/images/editor.jpg" width="319" height="241" />
マップデータはAIMS付属のMapEditorを使って作成します。
チップのサイズは16*16、マップのサイズは64*64にして、
こんな感じに適当に木を生やしてみました。
(マップチップ画像はマップエディタPlatinumに同梱のサンプルを使っています)

fmf形式でマップデータを出力したら適当なディレクトリに
マップチップ画像と一緒に放り込んでおきます。


次はスクリプトに手を入れます。
ちょうどいい感じにレイヤー9が使われていないのでこれを使います。

#game_common.lua
LAYER_MAPCHIP = 9

マップチップの表示は専用のアクターで行います。
gameシーンの開始時に生成するので game_OnStart()内でcreateActor()を実行します。
このアクターは通常の画像表示をしないので透明のチップハンドル(G.common.clear)を渡しています。

#game.lua
A.mapchip = createActor(G.common.clear, 0, 0, LAYER_MAPCHIP, 'mapchip')

アクターの実体はとりあえずplayer.lua内に定義します。
本当は別ファイルにしたほうがいいんですけど。

#player.lua
function mapchip_OnStart()
  G.mapchip = loadGraphic('gfx/empire-3.bmp', 0, 117, 117)
  local t = loadFMF('gfx/test.fmf')
  mapAllocate(LAYER_MAPCHIP, t.mapWidth, t.mapHeight, G.mapchip, 16, 16, 0, t.data[0])
  mapSetWrapMode(LAYER_MAPCHIP, OUTSIDE_NONE, OUTSIDE_WRAP)
  mapSetVisible(LAYER_MAPCHIP, true)
  setLayerScroll(LAYER_MAPCHIP, 0, 0)
end

function mapchip_OnStep()
  local x, y = getLayerScrollX(LAYER_MAPCHIP), getLayerScrollY(LAYER_MAPCHIP)
  y = y - 1
  setLayerScroll(LAYER_MAPCHIP, x, y)

  for index, id in pairs(iLayerActors(LAYER_EBULLET)) do
    ex, ey = mapGetWrappedPos(LAYER_MAPCHIP,
      bit.arshift(getX(id), 4),
      bit.arshift(getY(id) + y, 4))
    if mapRead(LAYER_MAPCHIP, ex, ey) ~= 0 then
      vanish(id)
    end
  end
end

function mapchip_OnVanish()
end

<img alt="suica.jpg" src="http://www.ausystem.org/~aushacho/memories/images/suica.jpg" width="323" height="254" />
これで、木がスクロールし、敵弾が木に当たると消滅するようになりました。
問題は色々ありますが。
最大の問題は当たり判定の大きさです。
敵弾の中心が当たり判定のあるチップ(16*16ドット)の内部に入った時に接触と見なすため
敵弾がもっと大きい判定を持っている場合に困ってしまいます。

また mapRead() ~= 0 と書いてあるとおり、チップ0番以外は全て当たり判定を持つと
見なすようになっているので、当たり判定を持たない背景が実現できません。

これらも追々解決しなければいけません。]]>
        
    </content>
</entry>
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(5)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/01/aimsstg5.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=491" title="AIMSでグラディウスっぽいSTGを作る(5)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.491</id>
    
    <published>2011-01-11T13:31:03Z</published>
    <updated>2011-01-11T13:51:35Z</updated>
    
    <summary>敵キャラが出現して、それを破壊できるようになりました。 が、絵面はあまり変わらな...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        敵キャラが出現して、それを破壊できるようになりました。
が、絵面はあまり変わらないのでSSはなし。

このあたりの処理はAIMSならではというところはあまりありません。

ショットやミサイルのOnStepでgetHitLayerを呼んで
当たっている敵の体力を減らしつつ自分はvanishで消滅。
敵のOnStepで体力が0になったらvanishを実行するだけです。
体力の値はVARスロットのどれかをそれ用に割り当てます。


敵のOnVanishでは cause==KILL_ORDERED だったら
爆発エフェクトのアクターを呼び、スコアをカウントアップするようにします。

これでかなりゲームらしさが出てきます。
自機はあいかわらず無敵のままなんですけどね。
自機が死ぬ処理を実装するにはシーンにも手を入れないといけないので
なるべく後回しにしておきたいところです。
        
    </content>
</entry>
<entry>
    <title>今年は家の建て替えを予定</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/01/post_327.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=490" title="今年は家の建て替えを予定" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.490</id>
    
    <published>2011-01-09T00:33:44Z</published>
    <updated>2011-01-09T00:48:32Z</updated>
    
    <summary>春になったら家の建て替えをする予定です。 なにしろ古い家ですからねぇ・・・。 私...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="日常" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        春になったら家の建て替えをする予定です。

なにしろ古い家ですからねぇ・・・。
私の部屋なんか、隣に音が筒抜けなので
常時ヘッドホン必須ですし、ジョイスティックも音がうるさいので使えません。

なので建て替えが終わったらXbox360とジョイスティック買って
格ゲーやシューティングをやりまくるんだ・・・！


近所の知り合いが最近タ○ホームで家を建てたばかりで、
「タ○ホームはいいよ」っていうのを真に受けて、家の親も乗り気だったんですけど
いやいや、そこはまずいだろと思って、とある口コミ掲示板のログを親に見せて
思いとどまらせました。

桧○の営業が熱心に足を運んできていて、たぶんここで決まるんじゃないかと思います。
評判もそんなに悪くなさそうですし。


早いところいらない本やCDを処分して荷物を減らしておかないとなぁ・・・。
        
    </content>
</entry>
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(4)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/01/aimsstg4.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=489" title="AIMSでグラディウスっぽいSTGを作る(4)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.489</id>
    
    <published>2011-01-08T08:47:25Z</published>
    <updated>2011-01-08T09:38:57Z</updated>
    
    <summary> ぱっと見では前回とあんまり変わりませんが、カプセルが出現するようになり それを...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        <![CDATA[<img alt="sample2.jpg" src="http://www.ausystem.org/~aushacho/memories/images/sample2.jpg" width="323" height="254" />
ぱっと見では前回とあんまり変わりませんが、カプセルが出現するようになり
それを取ってグラディウス式のパワーアップが出来るようになりました。

さすがにパワーアップの制御ロジックはAIMSですることではないので
それなりにめんどうです。

カプセルを取る、つまりカプセルとの当たり判定はAIMSの出番です。
当たり判定矩形はチップ1枚ごとに設定する必要があるので、
アニメーションするアクターの場合は全てのチップに矩形を設定します。

当たり判定の実行は二つの関数が用意してあり、
 isHitActor で一対一、getHitLayer でレイヤーに含まれる全てのアクターとの判定を行えます。
シューティングのような不特定多数のアクターが出現する場合は getHitLayer がいいでしょう。

自機アクターの onStep 内で getHitLayer を実行します。
当然カプセルの属するレイヤーは自機や自弾とは別にしておきます。
実行後、接触しているものがあればアクターハンドルの入ったテーブルが返るので

capsules = getHitLayer(LAYER_ITEM)
if #(capsules) > 0 then
  for index, id in pair(capsules) do
    vanish(id)
  end
end

とすれば接触したカプセルを全て消滅させることが出来ます。
]]>
        
    </content>
</entry>
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(3)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/01/aimsstg3.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=488" title="AIMSでグラディウスっぽいSTGを作る(3)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.488</id>
    
    <published>2011-01-07T08:26:15Z</published>
    <updated>2011-01-07T09:46:48Z</updated>
    
    <summary> それらしく動くものを作ってみました。 敵は出ないので当たり判定ロジックは入って...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        <![CDATA[<img alt="sample1.jpg" src="http://www.ausystem.org/~aushacho/memories/images/sample1.jpg" width="323" height="254" />
それらしく動くものを作ってみました。
敵は出ないので当たり判定ロジックは入っていませんし
パワーアップも最初からフル装備で固定です。

この程度なら簡単に作れてしまいます。

これを作っていてAIMSのアニメーションの仕様を理解できました。
AIMSのチップハンドル(cutGraphicなどで作成する)は
個別に「自分の表示フレーム数」「次に表示するチップハンドル」という情報を持っています。

ここに値を設定するには setGraphicAnime/setGraphicAnimeLoop/setGraphicAnimeSequence を使います。

アニメ情報を設定したチップハンドルをcreateActorに指定してアクターを生成すると
自動的にアニメーションが行われます。

setGraphicAnimeLoop({G.pat[1], G.pat[2], G.pat[3]}, 5, 1)
としてアニメ情報を設定し
createActor(G.pat[1], 0, 0, 1)
このようにアクターを生成すると、 1 > 2 > 3 > 1 の順にアニメーションがループします。

createActor(G.pat[2], 0, 0, 1)
であれば 2 > 3 > 1 > 2 の順にループします。

1 > 2 > 3 > 2 > 1 の順にループさせたい場合は
setGraphicAnimeLoop に渡すテーブルを {G.pat[1], G.pat[2], G.pat[3], G.pat[2]} にしたくなりますが
これではダメです。
2の次に表示するチップが「2 > 3」「2 > 1」の二種類存在することになってしまいます。
次に表示するチップは1種類しか指定できませんからどちらか一方しか有効になりません。

実際には「2 > 3」の設定が「2 > 1」で上書きされるので 1 > 2 > 1 というアニメになってしまいます。

ではどうするかというと、cloneGraphic を使って 2 のコピーを作って
それを4としてループを作成すればいいのです。

G.pat[4] = cloneGraphic(G.pat[2])
setGraphicAnimeLoop({G.pat[1], G.pat[2], G.pat[3], G.pat[4]}, 5, 1)

これで期待通りのアニメーションになります。
]]>
        
    </content>
</entry>
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(2)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/01/aimsstg2.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=487" title="AIMSでグラディウスっぽいSTGを作る(2)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.487</id>
    
    <published>2011-01-06T10:46:45Z</published>
    <updated>2011-01-06T11:17:00Z</updated>
    
    <summary>AIMSでは動くものは基本的に全てアクターです。それとは別にシーンというものもあ...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        AIMSでは動くものは基本的に全てアクターです。それとは別にシーンというものもありますが。

そしてアクターには必ずひとつ以上の画像と結びつきます。
ここが少し特殊なところですね。
例えば編隊を組んだ敵を全滅させるとボーナス取得、とかいうのの実現には
編隊自体を表すアクターが必要になってきますが、
表示すべき画像が存在しないこのアクターについても画像が必要です。

そういったアクターのために1*1ドットの透明な画像をダミーとして
用意するのが良さそうです。


アクターを動かすには前述のとおり画像(グラフィックハンドル)を用意して
createActorで生成したあと、addMoverで大まかな動作を指定するだけという、簡単なのがいいですね。
画面外に出たら消滅というのも自動で行わせることができますし
画像を複数登録しておけばアニメーションも簡単です。

それだけでは済まない場合になって初めて、アクタークラスを用意することになります。
クラスといってもオブジェクト指向的なアレではなくて
(クラス名)_OnXXX というファンクションを三つ用意するだけ。

継承とかが使えないのはそれはそれで物足りないところもありますが
そのへんは割り切ってしまいましょう。
共通部分をファンクションにくくりだして呼び出せばいいだけです。
(Lua自体はクラスが実現可能な仕組みをもっていますがAIMSには不向きなのです)


ということで今回は終わり。
        
    </content>
</entry>
<entry>
    <title>AIMSでグラディウスっぽいSTGを作る(1)</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2011/01/aimsstg1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=486" title="AIMSでグラディウスっぽいSTGを作る(1)" />
    <id>tag:www.ausystem.org,2011:/~aushacho/memories//1.486</id>
    
    <published>2011-01-03T04:11:54Z</published>
    <updated>2011-01-03T04:55:47Z</updated>
    
    <summary>去年は色々あって創作活動をほとんど何もしていなかったのですが 今年はもう少しがん...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="プログラミング" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        <![CDATA[去年は色々あって創作活動をほとんど何もしていなかったのですが
今年はもう少しがんばろうと思います。
去年の問題は今なお継続中ですがそれを理由にしていると何もできなくなるので・・・。

と、いうことで去年末に知った<a href="http://aims.dna-softwares.com/" target="_BLANK">AIMS</a>で色々やってみるつもりです。
AIMSというのはD.N.A.softwaresさんが開発したアクション系2Dゲーム開発に特化したゲームエンジンです。
ベースの言語はLuaなので、覚えやすくて高速だしコンパイルも不要です。
背景や地上敵が存在しないような縦STGならば驚くほど簡単に作れそうなところが魅力的ですね。

ネットで検索してみると、これを使ってゲームを制作しているという話はほとんど引っかからないし
サンプルも本家で公開しているものしか見つからないので、
同じようにAIMSでゲーム制作をしたい人のためにも情報を発信していけたらなぁと思います。

題材はタイトルにもあるように「グラディウスっぽいSTG」です。
グラディウスといったらオプションとかマップチップを使った背景とか
そういう要素が必須になってくるので、AIMSの使い方を覚えるのにも丁度いいかなぁ・・・。
]]>
        
    </content>
</entry>
<entry>
    <title>2010年のチャンピオンを振り返る</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2010/12/2010.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=485" title="2010年のチャンピオンを振り返る" />
    <id>tag:www.ausystem.org,2010:/~aushacho/memories//1.485</id>
    
    <published>2010-12-30T04:20:22Z</published>
    <updated>2010-12-30T05:46:27Z</updated>
    
    <summary>もう2010年も終わりなので今年のチャンピオンを簡単に振り返ってみたいと思います...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="漫画" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        もう2010年も終わりなので今年のチャンピオンを簡単に振り返ってみたいと思います。

まずは何といってもみつどもえとイカ娘のアニメ化ですね。
みつどもえの方はあまり評価は得られなかったようで残念ですが
イカ娘はすごかった。
オタ系ニュースサイトでもほとんど毎日なんらかのイカ娘ネタが取り上げられていて
注目されていることがよくわかりました。アニメの出来もよかったですしね。

星矢LCのOVAも二期の制作が始まっていてそれなりに好評を得ているみたいですね。

来年はイカ娘の二期とケルベロスあたりのアニメ化に期待したいです。


次は今年はじめから連載が始まった三作品「ケルベロス」「ハンザスカイ」「シュガーレス」が
揃って好評なことですね。この中ではケルベロスが一押し。

ケルベロスの前に短期集中で連載された「ジョギリ屋ジョー」があまりに衝撃的で
当時はかなり気に入ってましたから、連載開始を知って当初から期待してました。

ケルベロスはぱっと見、王道的な妖怪退治物ですが、話は熱いし、
主人公の景はショタカワイイし、女の子はそれぞれに違う魅力がいっぱいだし、
女の子は無残に殺されるし(ただし回想シーン内のみ)と
作者のリビドーがコマに叩きつけられていて、見ていてすがすがしい。
この調子で頑張ってもらいたいです。


あとは、読みきりで掲載された「破壊症候群」ですね。
これはチャンピオンの新人漫画賞で入選をとった作品です。
破壊が趣味な少女が、人類支配を企む虫人間を倒し、
街一番の巨大ビルを素手で破壊するというような話です。

何といっても絵がすごく魅力的なんですよ。
雰囲気的には「かってに改蔵」の初期の画風に近いものがありますが
顔の描き方は個性的でそれいて女の子はすごくかわいい。

大量に同じものを描くという表現が得意なようで、
虫人間の群れや、花畑、蝶、シャボン玉など、
見た人の心を色々な意味で揺り動かすような絵が描けるのはすごいと思います。

話は破壊症候群のようなメッセージ性のやや強いものや、
浦安Webで連載中の「ドラゴンスワロウ」のようなどぎついギャグコメディも得意なようですし
今後の活躍に期待したい新人さんです。


全体としては、連載陣はどれも好調でしたし読みきりや短期物も面白いものが多かったですね。
中にはナニコレ的なものもありましたが・・・まあ、よい年だったと思います。

来年もチャンピオンで面白い漫画が読めるといいなぁ。

        
    </content>
</entry>
<entry>
    <title>Windows7とブルーレイドライブを購入</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2010/09/windows7.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=484" title="Windows7とブルーレイドライブを購入" />
    <id>tag:www.ausystem.org,2010:/~aushacho/memories//1.484</id>
    
    <published>2010-09-05T09:03:24Z</published>
    <updated>2010-09-05T10:08:52Z</updated>
    
    <summary>みつどもえのBDを買ったので、BDが見れる環境を構築することにしました。 再生専...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="日常" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        みつどもえのBDを買ったので、BDが見れる環境を構築することにしました。

再生専用プレーヤーを買うくらいなら、多少高かろうとPCで見れるほうがいいので
OSも新調することにしました。
互換性とかの問題はそのときになったら考えるということで。

XPのときはSATAドライバのインストールに手を焼かされましたが
7では何も考える必要がなくて楽でした。BDの再生も問題なし。


7はXPとフォルダの配置やその他色々が違うので戸惑いますね。
あとウィンドウのデザインが、どれがアクティブなのかわかりづらくて困ります。

FF14のベンチはIDEエミュレーションからSATAになったおかげで
1000ポイントほどアップしました。
というかXP+SATA時とほぼ同じスコアに戻ったわけですが。

これで少しは動作が軽くなってくれるはず・・・。
        
    </content>
</entry>
<entry>
    <title>みつどもえBDが出たしドライブを買わないと</title>
    <link rel="alternate" type="text/html" href="http://www.ausystem.org/~aushacho/memories/2010/08/bd.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ausystem.org/~aushacho/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=483" title="みつどもえBDが出たしドライブを買わないと" />
    <id>tag:www.ausystem.org,2010:/~aushacho/memories//1.483</id>
    
    <published>2010-08-27T05:10:37Z</published>
    <updated>2010-08-27T05:31:03Z</updated>
    
    <summary>いずれはBDドライブを買わないと、と思いつつ先延ばしにしていたら みつどもえのB...</summary>
    <author>
        <name>あう社長</name>
        <uri>http://www.ausystem.org/~aushacho/</uri>
    </author>
            <category term="日常" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ausystem.org/~aushacho/memories/">
        いずれはBDドライブを買わないと、と思いつつ先延ばしにしていたら
みつどもえのBD1巻が発売されてしまいました。
もういい加減買わないと。

BDドライブについては何も調べていなかったんですが
書き込み可能なドライブも十分安くなってるんですね。
2万以下でCD,DVDの読み書きも可能なら
DVDドライブと置き換えてもまったく問題なさそうです。

ついでにOSもWin7にしちゃおうかな。
今のPCはXPでSATAエミュレーションモードで動いているので
非常に重いですし。


あと、twitterのウィジェットを表示するようにしてみました。
インデックスのページだけで、個別のエントリには表示されませんけど。

        
    </content>
</entry>

</feed> 


