亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么空指針?

//分別獲取空方塊的位置與點擊方塊的位置,通過x,y兩邊都差1的方式

GameData mNullGameData = (GameData) iv_null_ImageView.getTag();這里空指針?

GameData mGameData = (GameData) mImageView.getTag();




package com.example.puzzlegame;


import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.drawable.BitmapDrawable;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.GridLayout;

import android.widget.ImageView;

import android.widget.Toast;



public class MainActivity extends Activity {


/**利用二維數組創建若干游戲小方塊*/

private ImageView[][] iv_game_arr = new ImageView[4][4];

/** 游戲主界面 ?*/

private GridLayout gl_main_game;

//當前空方塊的實例的保存

private ImageView iv_null_ImageView;

@Override

? ? protected void onCreate(Bundle savedInstanceState) {

? ? ? ? super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.activity_main);

? ? ? ??

? ? ? ? //初始化游戲的若干個小方塊

? ? ? ? Bitmap bigBm = ((BitmapDrawable)getResources().getDrawable(R.drawable.g4)).getBitmap();//獲取一張大圖

? ? ? ? int tuWandH = bigBm.getWidth()/4;//每個游戲小方塊的寬和高

? ? ? ??

? ? ? ? for (int i = 0; i < iv_game_arr.length; i++) {

for (int j = 0; j < iv_game_arr[0].length; j++) {

Bitmap bm = Bitmap.createBitmap(bigBm, j * tuWandH, i * tuWandH, tuWandH, tuWandH);//根據行和列來切成若干個游戲小圖片

iv_game_arr[i][j] = new ImageView(this);

//設置每一個游戲小方塊的圖案

iv_game_arr[i][j].setImageBitmap(bm);

//設置方塊之間的間距

iv_game_arr[i][j].setPadding(1, 1, 1, 1);

iv_game_arr[i][j].setTag(new GameData(i, j, bm));//綁定自定義的數據

iv_game_arr[i][j].setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

boolean flag = isHasByNullImageView((ImageView) v);

Toast.makeText(MainActivity.this, "位置是否存在:"+flag, Toast.LENGTH_SHORT).show();

}

});

}

}

? ? ? ??

? ? ? ? //初始化游戲主界面,并添加若干個小方塊

? ? ? ? gl_main_game = (GridLayout) findViewById(R.id.gl_main_game);

? ? ? ? for (int i = 0; i < iv_game_arr.length; i++) {

for (int j = 0; j < iv_game_arr[0].length; j++) {

gl_main_game.addView(iv_game_arr[i][j]);

}

}

? ? ? ? //設置最后一個方塊為空的

? ? ? ? setNullImageView(iv_game_arr[3][3]);

? ? }


//設置某個方塊為空方塊

public void setNullImageView(ImageView mImageView){

mImageView.setImageBitmap(null);

}

//判斷當前點擊的方塊,是否與空方塊的位置關系是相鄰關系s

public boolean isHasByNullImageView(ImageView mImageView){

//分別獲取空方塊的位置與點擊方塊的位置,通過x,y兩邊都差1的方式

GameData mNullGameData = (GameData) iv_null_ImageView.getTag();

GameData mGameData = (GameData) mImageView.getTag();

if (mNullGameData.y==mGameData.y && mGameData.x+1==mNullGameData.x) { //當前點擊的方塊在空方塊的上邊

return true;

}else if(mNullGameData.y==mGameData.y && mGameData.x-1==mNullGameData.x){//當前點擊的方塊在空方塊的下邊

return true;

}else if(mNullGameData.y==mGameData.y+1 && mGameData.x==mNullGameData.x){//當前點擊的方塊在空方塊的左邊

return true;


}else if(mNullGameData.y==mGameData.y-1 && mGameData.x==mNullGameData.x){//當前點擊的方塊在空方塊的右邊

return true;


}

return false;

}

//每個游戲小方塊上要綁定的數據

class GameData{

//每個小方塊的實際位置

public int x = 0;

//每個小方塊的實際位置

public int y = 0;

//每個小方塊的圖片

public Bitmap bm;

//每個小方塊的圖片的位置

public int p_x = 0;

//每個小方塊的圖片的位置

public int p_y = 0;

public GameData(int x, int y, Bitmap bm){

this.x = x;

this.y = y;

this.bm = bm;

this.p_x = x;

this.p_y = y;

}

}

}


正在回答

1 回答

在setNullImageView中加一句話 ?iv_null_ImageView = mImageView ;

//設置某個方塊為空方塊
public?void?setNullImageView(ImageView?mImageView){
????mImageView.setImageBitmap(null);
????iv_null_ImageView?=?mImageView?;//設置當前為空的小方塊地址放到全局iv_null_ImageView
}


0 回復 有任何疑惑可以回復我~
#1

Jack_Xiao3185596 提問者

非常感謝!謝謝老師!?。?/div>
2016-08-03 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么空指針?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號