2017-01-11 12 views
2

私はこのようになりますスプライト画像の質感があります。Kirby RunlibGDXのアニメーションテクスチャ領域は

を、私はそれをアニメーション化しようとしています。私は画像を反転する理由であるyDown座標系を使用して、現在のよ次いで

//AssetLoader class 
runTexture = new Texture("kirbyrun.png"); 
runTexture.setFilter(TextureFilter.Nearest,TextureFilter.Nearest); 

//Run Hiro 
hiro1 = new TextureRegion(runTexture,0,55,37,55); 
hiro1.flip(false,true); 
hiro2 = new TextureRegion(runTexture,37,55,44,55); 
hiro2.flip(false,true); 
hiro3 = new TextureRegion(runTexture,81,55,44,55); 
hiro3.flip(false,true); 
hiro4 = new TextureRegion(runTexture,129,55,46,55); 
hiro4.flip(false,true); 
hiro5 = new TextureRegion(runTexture,176,55,41,55); 
hiro5.flip(false,true); 
hiro6 = new TextureRegion(runTexture,216,55,41,55); 
hiro6.flip(false,true); 
hiro7 = new TextureRegion(runTexture,257,55,41,55); 
hiro7.flip(false,true); 
hiro8 = new TextureRegion(runTexture,301,55,42,55); 
hiro8.flip(false,true); 

TextureRegion[] run = {hiro1,hiro2,hiro3,hiro4,hiro5,hiro6,hiro7,hiro8}; 
hiroRunAnimation = new Animation<TextureRegion>(0.5f,run); 
hiroRunAnimation.setPlayMode(Animation.PlayMode.LOOP); 

アニメーションTextureRegion配列にすべてのフレームを保存するこのコードはTextureRegion変数に各フレームを保存するように設定されています。このコードを使用してこれをレンダリングしようとした後

TextureRegion currentFrame = AssetLoader.hiroRunAnimation.getKeyFrame(runTime); 

sb.begin(); 

sb.draw(currentFrame,player.getX(),player.getY(),player.getWidth(),player.getHeight()); 
sb.end(); 

それはだけではなく、星のカービィのブロックの画像を開きます。 enter image description here

それは私が何か間違ったことをやっている明らかだ、私は」私のTextureRegionセクションで、おそらく私のX、Yの座標か間違っていると推測していますが、spritecow.comを使ってこれらの座標を取得したので、これを修正する方法がわかりません。私は左上の角が(0,0)であると仮定しており、正のYは画像を下ろすことを意味しています。これらのボックスの代わりにカービィを実際に表示させるにはどうすればいいですか?または、各フレームイメージを別々の.pngファイルに分割し、TextureRegionの代わりにTextureを使用する方が簡単なので、確定領域を指定する必要はありません。それから私はアニメーションを使うことができますか、それともうまくいかないでしょうか?

+0

これらの黒いボックスはあなたのスプライトシートにありますか? – eldo

答えて

1

ブラックボックスは、リージョンの位置を誤って定義しているためです。テクスチャがy = 0から始まるため、すべての地域がy = 55で始まります。間違っています。 テクスチャを反転して表示しているので、フリッピングも削除します。 リージョンのいくつかのリージョンのサイズを誤って決定しているようですので、おそらくダブルチェックしてください。

あなたのコードは次のようになります。その結果、これを行った後

// Note the third value have changed to zeroes and the flipping has been removed. 
hiro1 = new TextureRegion(runTexture,0,0,37,55); 
hiro2 = new TextureRegion(runTexture,37,0,44,55); 
hiro3 = new TextureRegion(runTexture,81,0,44,55); 
hiro4 = new TextureRegion(runTexture,129,0,46,55); 
hiro5 = new TextureRegion(runTexture,176,0,41,55); 
hiro6 = new TextureRegion(runTexture,216,0,41,55); 
hiro7 = new TextureRegion(runTexture,257,0,41,55); 
hiro8 = new TextureRegion(runTexture,301,0,42,55); 

はこれです:

enter image description here

+0

どのようにして各スプライトの正確な座標を取得できましたか? –

+0

私は座標(x、width、height)を変更しませんでした。ちょうど開始y位置を変更しました。 – Charanor

3

は、私はあなたがコーディネート「ハードコード化された」こと、それは右見アムスプライト?それは非常に良い考えではありません、libGDXはこれを解決するより快適な方法を持っています:Texture Packer

基本的には、単一のスプライトを1つのフォルダに入れ、テクスチャパッカースクリプトを実行してそれらをすべてマージします。スプライトの座標を持つjsonファイルも取得します。アセットマネージャで簡単に読み込むことができます。私はここにその例を作成しました:https://gist.github.com/reime005/87e1ed30548be31a632292a604f397ef