これは、コロナでゲームを書く方法についての物語です。
エントリのレベルは最小限です(そして代数学科のオタクは理解します)。
コロナは、すべてのプラットフォームで2Dゲームを作成するためのエンジンであり、タッチタッチの今日は宇宙飛行士の日です。 ゲームのプロットは適切に選択され、もちろん、最初の宇宙飛行士の後に繰り返します
-行こう!
2時間のプログラミングで何が起こりますか?
これが、2時間のプログラミングで得られたものです。
もちろん、私は代数と同じくらい線形のプログラマーなので、このトップスはすべて3分の1の時間しかかかりません。
見つけましたか? はい、これはベトナムの
Ishkvからの
アドオンのゲームです。
アプリケーションが作成者に1日あたり50,000ドルをもたらしたことを思い出させてください。 私の意見では悪くない。
私のクリップで鳥と柱の衝突の破片をよく見ると、碑文HABRが見えます。 この画像を粒子効果のテクスチャとして使用します。
コロナツールのインストール
10分かかり
、多くの場所で美しく塗装されています。gagarinbirdプロジェクトの作成
お使いのマシン(Macを持っています)でCoronaを起動し、[
新しい空のプロジェクトを作成 ]メニュー項目を選択し
ます 。
その結果、gagarinbirdディレクトリは指定された場所に作成され、そこにはあらゆる種類の有用なガベージがたくさんあります。そのうち、1つのファイルを編集します。
main.lua
テキストエディター-あなたの裁量で。 プログラミング言語はLuaです。
まず、ゲームには写真と音声が必要です。
著者を苦しめることなくそれらを取得する方法?- ファイルFlappy Bird [Dong Nguyen](v1.2 LP os60)をダウンロードします-Orbicos-ICPDA.rc309.ipa
- ファイルの名前をFlappy Bird [Dong Nguyen](v1.2 LP os60)に変更します-Orbicos-ICPDA.rc309.zip
- ファイルFlappy Bird [Dong Nguyen](v1.2 LP os60)-Orbicos-ICPDA.rc309.zipを解凍します。
- Flap.appファイルを右クリックして、[パッケージコンテンツの表示]を選択します
- 写真とサウンドをgagarinbirdディレクトリにコピーします
便宜上、サブディレクトリgagarinbird / Assetsを作成し、すべての写真をここに配置します。
同様に、gagarinbird / Soundsサブディレクトリを作成し、すべてのサウンドをここに配置します。
コードの最初の2行-チェック音Mu
コードの最初の2行をmain.luaファイルに挿入します
dieSound = audio.loadSound( "Sounds/sfx_die.caf" ) audio.play( dieSound )
Corona(多くの場合Corona Simulator)の2つのホットボタン/ cmd / + Rをクリックすると、電話のようなウィンドウでアプリケーションが起動し、死音が鳴ります! あぁ、すべてが機能します。
背景はバージンブラックですが、それは重要ではありません-サウンドの再生方法を学習しました。 そして、Android、iPhone、および(許して、主)Windowsの両方で同じように聞こえます。
サウンドをダウンロードしてすべてを美しくする
loadSounds()関数を作成して呼び出します
local function loadSounds() dieSound = audio.loadSound( "Sounds/sfx_die.caf" ) hitSound = audio.loadSound( "Sounds/sfx_hit.caf" ) pointSound = audio.loadSound( "Sounds/sfx_point.aif" ) swooshingSound = audio.loadSound( "Sounds/sfx_swooshing.caf" ) wingSound = audio.loadSound( "Sounds/sfx_wing.caf" ) boomSound = audio.loadSound( "Sounds/sfx_boom.mp3" ) end
背景画像をアップロードしてタップタップを処理する
携帯電話の画面全体に背景画像を描くことを学ぶ
local function initBackGround() local ground = display.newImageRect( "Assets/ground.png", display.actualContentWidth, display.actualContentHeight ) ground.x = display.contentCenterX ground.y = display.contentCenterY end
(ctrl + R)を実行して、このような美しい画像を取得します
ほら、今、私たちは好きなように絵を描き、どこにでも置いて、変形することができます。
例えば
ground.rotation = 90
背景画像を90度回転します。
画面に突進を追加します。
ground:addEventListener("tap", wing) local function wing() audio.play( wingSound ) end
地面でのすべてのクリックをキャッチし、wing()関数を呼び出すリスナーを追加しました。
コードを見ると、地面にあるそれぞれの突く部分がwing.cafの音を発生させるはずです。
私たちは始めます-すべてが機能します。
飛行物理学とタイマー
コロナには、重力と衝突を伴う物理ライブラリがあります。 しかし、私たちのゲームにとっては冗長です。 オブジェクト(鳥、地球、極)を追加し、パラメータを設定するには、地球の重力場で衝突や動力学をチェックするタイマー(毎秒40回)を開始するだけでなく、より多くのコードが必要になります。 Earth窓の地球。 気が散ってすみません。
タイムマシンの言語でダイナミクスを作りましょう。
1秒あたり40回、関数gameLoop()が呼び出されます
鳥の動きのダイナミクスは、この機能の2行に記録されています。 ここで、gは重力加速度です(iPhoneの場合、毎秒800ピクセル)
dt = 0.025-タイムステップ
uBird-X軸に沿った鳥の速度
vBird-Y軸に沿った鳥の速度
xBird-鳥のX座標
yBird-y軸に沿った鳥の座標
柱と表面のダイナミクスはさらに単純です-移動はX軸に沿ってのみ発生します
for i=1,3 do pipes[i].x = pipes[i].x + dt * uBird end
ゲームの状態
すべてのレンガは準備ができており、エレガントな牛のプログラムですべてをつなぐことが残っています。 したがって、このゲームには4つの状態があります。
状態0(gameStatus = 0)すべてが凍結され、ゲームを開始する準備ができました。 画面をクリックするのを楽しみにしています。 押すと、状態1に進みます。
状態1(gameStatus = 1)鳥が飛ぶ、柱が動く、重力が働く。 画面をタップすると、鳥の速度がまっすぐ上がります(vBird = jumpSpeed)。
状態2(gameStatus = 2)鳥は緑色の柱と衝突し、厳密に倒れ、柱は立っており、重力が働いています。 画面をタップしても何にも影響しません。
状態3(gameStatus = 3)鳥は地球と衝突し、すべてが凍結し、採点し、飛行の結果を示しました。 クリックして状態0になるのを待っています。
原則として、状態1と2は、後者に0の水平速度を割り当てることで組み合わせることができます。これは好みの問題です。
翼とスプライトのアニメーション
鳥の傾きは速度ベクトルに比例します。
これは、角度の逆正接に等しくなります。
bird.rotation = math.atan(vBird/uBird)
画面をクリックしたときに鳥の羽ばたきをアニメーション化するには、コロナスプライトリストが使用されます。 これは、PNG画像よりも少し複雑です。
アニメーションフレームを別のpngファイルに作成します。 サイズ400 x 100ピクセル。 各内部スプライトのサイズは100あたり100です。つまり、4つのフレームがあります。
鳥の初期化コードは次のとおりです
local function setupBird() local options = { width = 100, height = 100, numFrames = 4, sheetContentWidth = 400,
さて、画面をクリックすると、コード行を呼び出します
bird:play()
そして、鳥は2回連続して羽ばたきします。
衝突とパーティクル効果
衝突チェックは基本です。
まず、地球の表面との衝突を確認します
if yBird>yLand then yBird = yLand crash() end
第二に、柱との衝突チェック
local function checkCollision(i) local dx = 40
鳥が柱と衝突するポイントにパーティクルエフェクトを追加します。
コードは扱いにくいように見えますが、エフェクトの20個のパラメーターを変更すると、驚くべき爆発、フラッシュ、火の玉が得られます。
local function setupExplosion() local dx = 31 local p = "Assets/habra.png" local emitterParams = { startParticleSizeVariance = dx/2, startColorAlpha = 0.61, startColorGreen = 0.3031555, startColorRed = 0.08373094, yCoordFlipped = 0, blendFuncSource = 770, blendFuncDestination = 1, rotatePerSecondVariance = 153.95, particleLifespan = 0.7237, tangentialAcceleration = -144.74, startParticleSize = dx, textureFileName = p, startColorVarianceAlpha = 1, maxParticles = 128, finishParticleSize = dx/3, duration = 0.75, finishColorRed = 0.078, finishColorAlpha = 0.75, finishColorBlue = 0.3699196, finishColorGreen = 0.5443883, maxRadiusVariance = 172.63, finishParticleSizeVariance = dx/2, gravityy = 220.0, speedVariance = 258.79, tangentialAccelVariance = -92.11, angleVariance = -300.0, angle = -900.11 } emitter = display.newEmitter(emitterParams ) emitter:stop() end
このコードはコメントなしで残します。パラメーターを自分でお楽しみください。
local function explosion() emitter.x = bird.x emitter.y = bird.y emitter:start() end
機能爆発()は、鳥が柱に衝突したときに呼び出されます。 ゲーム内のすべての写真のスタイルでエフェクトを
ピクセル化できませんでした。 おそらく、これを行う方法についてのアドバイスがあります。 どちらかといえば、スケールは動作しませんでした。
ありがとう
プロジェクト全体は、5月の休暇中にCorona MarketplaceからSMSなしで無料でダウンロードできます。 コードは管理されます。
とりわけ、私はコロナの伝道者になり、最初の給料を受け取りました。これはすべて、Habréの出版のおかげです。 リソース、そしてもちろんあなたの読者に感謝します。 代数学者の皆さん、こんにちは。
プロジェクトコード
1つのmain.luaファイルのプロジェクトコード