Android Oyunum Çalışmıyor Yardım
-
Müridler TicTacToe oyununun videosunu izledim adamla beraber kodladım kodlarda sorun yok.öğrenme amaçlı izleyip pratik yapıyorum.herşey bitti fakat oyun açılırken hatalar alıyorum.oyun açılıyor sonra geri kapanıyor ve telefon ekranınra durduruldu yazıyor.bu hataları nasıl okuyup internette araştırabilrim bilmiyorum.isteyen olursa teamviewer yada kodları atabilirim.
not: AndEngine ile yazdım
07-19 18:07:46.211: D/AndroidRuntime(19081): Shutting down VM
07-19 18:07:46.211: W/dalvikvm(19081): threadid=1: thread exiting with uncaught exception (group=0x41b4c700)
07-19 18:07:46.216: E/AndroidRuntime(19081): FATAL EXCEPTION: main
07-19 18:07:46.216: E/AndroidRuntime(19081): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.tictaktoe/com.example.tictaktoe.TicTakToeActivity}: java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
07-19 18:07:46.216: E/AndroidRuntime(19081): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2219)
07-19 18:07:46.216: E/AndroidRuntime(19081): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
07-19 18:07:46.216: E/AndroidRuntime(19081): at android.app.ActivityThread.access$700(ActivityThread.java:159)
07-19 18:07:46.216: E/AndroidRuntime(19081): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
07-19 18:07:46.216: E/AndroidRuntime(19081): at android.os.Handler.dispatchMessage(Handler.java:99)
07-19 18:07:46.216: E/AndroidRuntime(19081): at android.os.Looper.loop(Looper.java:176)
07-19 18:07:46.216: E/AndroidRuntime(19081): at android.app.ActivityThread.main(ActivityThread.java:5419)
07-19 18:07:46.216: E/AndroidRuntime(19081): at java.lang.reflect.Method.invokeNative(Native Method)
07-19 18:07:46.216: E/AndroidRuntime(19081): at java.lang.reflect.Method.invoke(Method.java:525)
07-19 18:07:46.216: E/AndroidRuntime(19081): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
07-19 18:07:46.216: E/AndroidRuntime(19081): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
07-19 18:07:46.216: E/AndroidRuntime(19081): at dalvik.system.NativeStart.main(Native Method)
07-19 18:07:46.216: E/AndroidRuntime(19081): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
07-19 18:07:46.216: E/AndroidRuntime(19081): at com.example.tictaktoe.TicTakToeModel.reset(TicTakToeModel.java:21)
07-19 18:07:46.216: E/AndroidRuntime(19081): at com.example.tictaktoe.TicTakToeModel.(TicTakToeModel.java:14)
07-19 18:07:46.216: E/AndroidRuntime(19081): at com.example.tictaktoe.TicTakToeActivity.(TicTakToeActivity.java:22)
07-19 18:07:46.216: E/AndroidRuntime(19081): at java.lang.Class.newInstanceImpl(Native Method)
07-19 18:07:46.216: E/AndroidRuntime(19081): at java.lang.Class.newInstance(Class.java:1130)
07-19 18:07:46.216: E/AndroidRuntime(19081): at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
07-19 18:07:46.216: E/AndroidRuntime(19081): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
07-19 18:07:46.216: E/AndroidRuntime(19081): ... 11 more
-
07-19 18:07:46.216: E/AndroidRuntime(19081): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.tictaktoe/com.example.tictaktoe.TicTakToeActivity}: java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
Şu kısma takıldım ben, şu "TicTakToeActivity" activitysinin içinde bi dizide indexte taşma oluyo diyor bi kontrol et.
-
wasd bunu yazdı
07-19 18:07:46.216: E/AndroidRuntime(19081): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.tictaktoe/com.example.tictaktoe.TicTakToeActivity}: java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
Şu kısma takıldım ben, şu "TicTakToeActivity" activitysinin içinde bi dizide indexte taşma oluyo diyor bi kontrol et.
aynen dediği gibi görünüyor. çünkü exception daki dizinin boyutunun 3 olduğunu ama index olarak da 3 erişildiğini söylüyor, bu yüzden taşma istisnası fırlatılıyor. 3 elemanlı bir dizde index en fazla 2 olmalı.
-
saatlerdir bakıyorum ama yok bulamadım
package com.example.tictaktoe;
import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.primitive.Line;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.entity.sprite.ButtonSprite;
import org.andengine.entity.sprite.ButtonSprite.OnClickListener;
import org.andengine.opengl.font.StrokeFont;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.andengine.opengl.texture.atlas.bitmap.BuildableBitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.source.IBitmapTextureAtlasSource;
import org.andengine.opengl.texture.atlas.buildable.builder.BlackPawnTextureAtlasBuilder;
import org.andengine.opengl.texture.atlas.buildable.builder.ITextureAtlasBuilder.TextureAtlasBuilderException;
import org.andengine.opengl.texture.region.ITextureRegion;
import org.andengine.opengl.vbo.VertexBufferObjectManager;
import org.andengine.ui.activity.SimpleBaseGameActivity;
import org.andengine.util.debug.Debug;
import android.app.AlertDialog;
import android.widget.Toast;
public class TicTakToeActivity extends SimpleBaseGameActivity implements OnClickListener{
private TicTakToeModel board= new TicTakToeModel();
private Piece currentPlayer=board.getCurrentPlayer();
static final private int CAMERA_WIDTH=480;
static final private int CAMERA_HEIGHT=480;
final private int GRID_WIDTH=3;
final private int GRID_HEIGHT=3;
final private int STROKE_WIDTH= 4;
private ButtonSprite[][] gridSprite= new ButtonSprite[GRID_WIDTH][GRID_HEIGHT];
private BuildableBitmapTextureAtlas mBitmapTextureAtlas;
private ITextureRegion mBlankTextureRegion;
private ITextureRegion mXTextureRegion;
private ITextureRegion mOTextureRegion;
@Override
public EngineOptions onCreateEngineOptions() {
// TODO Auto-generated method stub
final Camera camera= new Camera(0,0,CAMERA_WIDTH,CAMERA_HEIGHT);
return new EngineOptions(true,ScreenOrientation.PORTRAIT_FIXED,new RatioResolutionPolicy(CAMERA_WIDTH,CAMERA_HEIGHT),camera);
}
@Override
protected void onCreateResources() {
// TODO Auto-generated method stub
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
this.mBitmapTextureAtlas=new BuildableBitmapTextureAtlas(getTextureManager(), 128, 128);
this.mBlankTextureRegion= BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "blank_icon.png");
this.mXTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "icon_x.png");
this.mOTextureRegion= BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "icon_o");
try{
this.mBitmapTextureAtlas.build(new BlackPawnTextureAtlasBuilder<IBitmapTextureAtlasSource, BitmapTextureAtlas>(0,0,0));
this.mBitmapTextureAtlas.load();
}catch (TextureAtlasBuilderException e){
Debug.e(e);
}
}
@Override
protected Scene onCreateScene() {
// TODO Auto-generated method stub
final Scene scene = new Scene();
final VertexBufferObjectManager vbomManager = this.getVertexBufferObjectManager();
float lineX[] = new float[GRID_WIDTH];
float lineY[] = new float[GRID_HEIGHT];
float touchX[] = new float[GRID_WIDTH];
float touchY[] = new float[GRID_HEIGHT];
float midTouchX = CAMERA_WIDTH/GRID_WIDTH/2;
float midTouchY = CAMERA_HEIGHT/GRID_HEIGHT/2;
float half_touchX=mBlankTextureRegion.getWidth()/2;
float half_touchY=mBlankTextureRegion.getHeight()/2;
float paddingX= midTouchX-half_touchX;
float paddingY = midTouchY-half_touchY;
for(int i=0;i<GRID_WIDTH;i++){
lineX[i]=CAMERA_WIDTH/CAMERA_WIDTH*i;
touchX[i]=lineX[i]+paddingX;
}
for(int i=0;i<GRID_HEIGHT;i++){
lineY[i]=CAMERA_HEIGHT/CAMERA_HEIGHT*i;
touchY[i]=lineY[i]+paddingY;
}
scene.setBackground(new Background(0.85f, 0.85f, 0.85f));
//draw Grid lines
for(int i =1; i<GRID_WIDTH;i++){
final Line line = new Line(lineX[i],0,lineX[i],CAMERA_HEIGHT,STROKE_WIDTH,vbomManager);
line.setColor(0.15f, 0.15f, 0.15f);
scene.attachChild(line);
}
for(int i =1; i<GRID_HEIGHT;i++){
final Line line = new Line(0,lineY[i],CAMERA_WIDTH,lineY[i],STROKE_WIDTH,vbomManager);
line.setColor(0.15f, 0.15f, 0.15f);
scene.attachChild(line);
}
//layout the buttonSprites
for(int i=0;i<GRID_WIDTH;i++)
for(int j=0;j<GRID_HEIGHT;j++){
final ButtonSprite button= new ButtonSprite(touchX[i], touchY[j], this.mBlankTextureRegion, this.mXTextureRegion,this.mOTextureRegion,vbomManager, this);
scene.registerTouchArea(button);
scene.attachChild(button);
gridSprite[i][j]=button;
}
scene.setTouchAreaBindingOnActionDownEnabled(true);
return scene;
}
@Override
public void onClick(final ButtonSprite pButtonSprite, float pTouchAreaLocalX,
float pTouchAreaLocalY) {
/*runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//which button was pressed
float x = pButtonSprite.getX();
float y = pButtonSprite.getY();
int gridX=(int)Math.floor(x /CAMERA_WIDTH*GRID_WIDTH);
int gridY=(int)Math.floor(y /CAMERA_HEIGHT*GRID_HEIGHT);
if(gridSprite[gridX][gridY]==pButtonSprite && currentPlayer==board.getCurrentPlayer()){
//update the model
board.setValue(gridX, gridY, currentPlayer);
//disable the button
pButtonSprite.setEnabled(false);
if(currentPlayer == Piece.X){
//change the spirte x
pButtonSprite.setCurrentTileIndex(1);
}else{
//change sprite to 0
pButtonSprite.setCurrentTileIndex(2);
}
//check if there is a winner
Piece winner = board.checkWinner();
if(winner != Piece._){
//pop up dialog with the winner
AlertDialog.Builder ADBuilder = new AlertDialog.Builder(TicTakToeActivity.this);
ADBuilder.setMessage(winner +" wins!").show();
reset();
board.reset();
}
//pop up a dialog if there is winner
currentPlayer = board.getCurrentPlayer();
}
}
private void reset() {
// TODO Auto-generated method stub
for(int i=0;i<GRID_WIDTH;i++)
for(int j=0;j<GRID_HEIGHT;j++){
gridSprite[i][j].setEnabled(true);
gridSprite[i][j].setCurrentTileIndex(0);
}
}
});*/
}
}
-
@Override public void run() { // TODO Auto-generated method stub //which button was pressed float x = pButtonSprite.getX(); float y = pButtonSprite.getY(); int gridX=(int)Math.floor(x /CAMERA_WIDTH*GRID_WIDTH); int gridY=(int)Math.floor(y /CAMERA_HEIGHT*GRID_HEIGHT); if(gridSprite[gridX][gridY]==pButtonSprite && currentPlayer==board.getCurrentPlayer()){
Şu kısımda olabilir gibi geldi. Yuvarlama fonksiyonu değeri bir üste atabilir, ve çarpma bölme işlemlerinin sırası doğru mu? İşlem sırasına göre bir paranteze almak sorunu çözebilir.
wasd tarafından 20/Tem/14 22:01 tarihinde düzenlenmiştir -
hocam walla nası yaptım bilmiorum ama oldu şu anda açılıo fakat bi tane kare koydu siyah geri kalan alan beyaz.yani tam oturmadı yerlerine.bakıyorum.tüm günümü yedi
Ekerci tarafından 20/Tem/14 23:45 tarihinde düzenlenmiştir -
up
halen resimdeki gib pff -
Teldeyim hocam pek bakamadım ama gördüğüm kadarıyla ekran boyutu almada sıkıntı var. Şu getheigh ve witdh kısmına bi break point koy bak dönen değelere. O beyaz kutudaki değeri nasıl alıyorsan, siyah kutu için de benzerini yapman lazım. Bi kaç çeşit boyut var alınan. O yüzden senin aldığın tam ekran boyutları olmadığı için çizim de yanlış çıkıyor
-
unbalanced bunu yazdı
Teldeyim hocam pek bakamadım ama gördüğüm kadarıyla ekran boyutu almada sıkıntı var. Şu getheigh ve witdh kısmına bi break point koy bak dönen değelere. O beyaz kutudaki değeri nasıl alıyorsan, siyah kutu için de benzerini yapman lazım. Bi kaç çeşit boyut var alınan. O yüzden senin aldığın tam ekran boyutları olmadığı için çizim de yanlış çıkıyor
peki hocam.her türlü konbinasyonu deneyecem
-
merhaba pm olarak projeni atabilir misin?
çözebileceğime inanıyorum :)
EDİT : GLES1 mi GLES2 mi?
DuPi tarafından 22/Tem/14 00:11 tarihinde düzenlenmiştir -
Hocam rica etsem şu uzun kod yığınını pastebin tarzı sitelerden birisine koyabilirmisim :) Hem senin için hemde bizler için daha rahat ve düzgün olur :)