2014-02-18 34 views
0

我是新來的計算機編程,我正在關注Android遊戲開發。我正在使用Java教程Android遊戲開發 - 第3部分:處理輸入,並且在第一個五分鐘內,他將png文件放入「Tutorial-android」目錄中的assets/data文件夾中。我這樣做了,然後跟着他。他成功地裝載了馬里奧的照片,我不能。我抄他的確切代碼,使用Eclipse和libgdx,它不能'找到'和'加載'我的PNG圖像

package com.me.tutorial; 

import com.badlogic.gdx.ApplicationListener; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.GL10; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.math.Vector2; 

public class Tutorial implements ApplicationListener { 
; 
SpriteBatch batch; 
Texture mario; 

Vector2 position; 
@Override 
public void create() {  
batch = new SpriteBatch(); 
mario = new Texture(Gdx.files.internal("mario.png")); 


position = new Vector2(50,50); 
} 

@Override 
public void dispose() { 
} 

@Override 
public void render() {  
Gdx.gl.glClearColor(1, 1, 1, 1); 
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 


batch.begin(); 
batch.draw(mario, position.x, position.y); 
batch.end(); 
} 

我得到了這些錯誤

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException:   Couldn't load file: mario.png 
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140) 
at com.badlogic.gdx.graphics.glutils.FileTextureData.prepare(FileTextureData.java:64) 
at com.badlogic.gdx.graphics.Texture.load(Texture.java:142) 
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:133) 
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:112) 
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:104) 
at com.me.tutorial.Tutorial.create(Tutorial.java:19) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:137) 
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:115)  

產生的原因:com.badlogic.gdx.utils.GdxRuntimeException:未找到文件:mario.png(內部) at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:134) at com.badlogic.gdx.files.FileHandle.readBytes(FileHandle.java:218) at com.badlogic.gdx.graphics .Pixmap。 (Pixmap.java:137) ... 8更多

我看了,我找不到解決方法。請幫助我,謝謝。

回答

0

Gdx.files.internal("path")調查你的jar中的源文件夾。在Android上,這個源文件夾就像@BennX所說的asset文件夾,儘管我知道它必須是該文件夾。在桌面上,您可以擁有自己的文件夾,但是您需要在Eclipse中將其標記爲源文件夾。 因此,如果您的Projectstructure類似於:asset/textures/mario.png,您必須致電Gdx.files.internal("textures/mario.png");

+0

當我添加@覆蓋 public void render(){ Gdx.gl.glClearColor(1,1,1,1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); if(Gdx.input.isKeyPressed(Keys.W)); { position.y + = 1f; } if(Gdx.input.isKeyPressed(Keys.A)); { position.x - = 1f; } if(Gdx.input.isKeyPressed(Keys.S)); { position.y - = 1f; } if(Gdx.input.isKeyPressed(Keys.D)); { position.x + = 1f; } batch.begin(); batch.draw(mario,position.x,position.y); batch.end(); } '它加載圖片。但是當我按下W,A,S,D時它不會移動圖像。 – Noob2Coding

+0

我會實現InputProcessor接口,然後將您的類設置爲輸入處理器:Gdx.input.setInputProcessor(this)。然後你應該重寫keyDown和keyUp方法(因爲它是一個你必須實現的接口,但是你需要完成這兩個接口)。存儲一個'int dir':如果你沒有按下鍵,-1表示「W」,2表示「W + A」......在keyDown中,你將按鍵添加到你的int中,在keyUp中刪除它。在render()中你說if(dir == 1)pos.x + = speed * delta; else if(dir == 2){pos.x + = speed/2 * delta; pos.y + =速度/ 2 *增量;}。這應該工作。但這只是僞代碼。 – Springrbua

2

如果它在asset/data文件夾,你需要加載線更改爲:

mario=new Texture(Gdx.files.internal("data/mario.png"); 

內部眺望asset文件夾不進asset/data文件夾。

0

謝謝你的答案。我做了Gdx.files.internal("data/mario"),我跑它和馬里奧的圖片上來就像它之前,但是當我添加

@Override 
    public void render() {   
    Gdx.gl.glClearColor(1, 1, 1, 1); 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    if(Gdx.input.isKeyPressed(Keys.W));{ 
     position.y += 1f; 
    } 
    if(Gdx.input.isKeyPressed(Keys.A));{ 
     position.x -= 1f; 

    } 
    if(Gdx.input.isKeyPressed(Keys.S));{ 
     position.y -= 1f; 

    } 
    if(Gdx.input.isKeyPressed(Keys.D));{ 
     position.x += 1f; 
    } 


batch.begin(); 
batch.draw(mario, position.x, position.y); 
batch.end(); 
} 

` 「輸入」當我裝它不工作。它加載圖片。但是當我按下W,A,S,D時它不會移動圖像。就像LazyTryhard在他的視頻中所做的一樣。

相關問題