GameView 在与外部任何事物交互时崩溃

问题描述

我创建了这个 GameView,问题从 t 变量开始,我让它取了我在另一个类中创建的值,因此整个视图崩溃了,当我给它一个精确的值时“例如:t = 75;”它不会崩溃

总结: - 我刚刚创建了一个包含变量的类 Constants。 - 然后在 MainActivity 他们得到一个值。 - 然后当我尝试在 GameView 类中使用它时,它崩溃了。

作为另一个例子,每当我尝试从视图中更改某些内容时,这在视图之外“就像 TextView score 中的文本”一样,视图也会崩溃

这是GameView

package com.bks.snakegame;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;


import java.util.ArrayList;

public class GameView extends View {

    TextView score = findViewById(R.id.txt_score);






    private Bitmap bmGrass1,bmGrass2;
    private int t = 75*Constants.SCREEN_WIDTH/1080;
    private int h = 21,w = 12;
    private ArrayList<Grass> arrGrass= new ArrayList<Grass>();


    public GameView(Context context,AttributeSet attrs) {
        super(context,attrs);



        bmGrass1 = BitmapFactory.decodeResource(this.getResources(),R.drawable.grass);
        bmGrass1 = Bitmap.createScaledBitmap(bmGrass1,t,true);
        bmGrass2 = BitmapFactory.decodeResource(this.getResources(),R.drawable.grass03);
        bmGrass2 = Bitmap.createScaledBitmap(bmGrass2,75*1080/1080,true);

        for (int i = 0;i<h;i++) {
            for (int j = 0; j < w; j++){
                if((i+j)%2==0){

                    arrGrass.add(new Grass(bmGrass1,j*75+1080/2-(w/2)*75,i*75 + 100*1080/1920,75,75));
                }else {

                    arrGrass.add(new Grass(bmGrass2,75));
                }

            }


        }




    }

    public GameView(Context context,AttributeSet attrs,int defStyleAttr) {
        super(context,attrs,defStyleAttr);
    }

    public GameView(Context context,int defStyleAttr,int defStyleRes) {
        super(context,defStyleAttr,defStyleRes);
    }
    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);

        canvas.drawColor(0xFF1A6100);
        for (int i = 0; i<arrGrass.size(); i++){
            canvas.drawBitmap(arrGrass.get(i).getBm(),arrGrass.get(i).getX(),arrGrass.get(i).getY(),null);


        }
    }
}

这是MainActivity

package com.bks.snakegame;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.displayMetrics;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView score = findViewById(R.id.txt_score);
        this.getwindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        displayMetrics dm = new displayMetrics();
        this.getwindowManager().getDefaultdisplay().getMetrics(dm);
        Constants.SCREEN_HEIGHT = dm.heightPixels;
        Constants.SCREEN_WIDTH = dm.widthPixels;

    }
}

这是 Constants

package com.bks.snakegame;

public class Constants {

    public static int SCREEN_WIDTH;
    public static int SCREEN_HEIGHT;


}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)