Java Android Studio学习-简单2D游戏应用程序;如何使SurfaceView正常工作?

Java Android Studio学习-简单2D游戏应用程序;如何使SurfaceView正常工作?,java,android,android-studio,Java,Android,Android Studio,我正在同时学习Java和Android Studio。因为我是一个新手,所以我正在尝试写尽可能最简单和最少的代码。我正在尝试的应用程序应该只在屏幕上显示ball.png,但我得到的只是一个白色屏幕。我使用Bluestack作为模拟器,因为我使用的是Windows 7 home 64(amd),Android Studio的模拟器无法工作。这是密码 主要活动 package com.Somechit.android2dgame; 导入android.app.Activity; 导入android.

我正在同时学习Java和Android Studio。因为我是一个新手,所以我正在尝试写尽可能最简单和最少的代码。我正在尝试的应用程序应该只在屏幕上显示ball.png,但我得到的只是一个白色屏幕。我使用Bluestack作为模拟器,因为我使用的是Windows 7 home 64(amd),Android Studio的模拟器无法工作。这是密码

主要活动

package com.Somechit.android2dgame;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.Window;
导入android.view.WindowManager;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
公共类MainActivity扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//设置全屏
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
//不设标题
this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
DrawIt gSuf=新的DrawIt();
}
}
在这里,我试图制作一个SurfaceView一个线程

导入android.app.Activity;
导入android.os.Bundle;
导入android.view.SurfaceView;
导入android.view.SurfaceHolder;
导入android.graphics.Canvas;
导入android.view.view;
导入android.view.view.OnTouchListener;
导入android.view.MotionEvent;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
公共类DrawIt扩展活动实现OnTouchListener{
我们的观点;
位图球;
浮点数SBallx=0;
浮动SBALY=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
oView=新的OurView(本);
oView.setOnTouchListener(此);
SBall=BitmapFactory.decodeResource(getResources(),R.raw.ball);
setContentView(oView);
}
@凌驾
受保护的void onPause(){
super.onPause();
暂停();
}
@凌驾
受保护的void onResume(){
super.onResume();
oView.resume();
}
@凌驾
公共布尔onTouch(视图v,MotionEvent mevnt){
返回false;
}
公共类OurView扩展了SurfaceView实现Runnable{
线程OurThread=null;
面层支墩;
布尔值CanRun=false;
公共视图(绘图上下文){
超级(上下文);
SHolder=getHolder();
}
公开募捐{
while(CanRun){
如果(!SHolder.getSurface().isValid()){
继续;
}
Canvas-OurCanvas=SHolder.lockCanvas();//锁定画布,绘制到画布,然后解锁
OurCanvas.drawARGB(255,10,10100);
drawBitmap(SBall、SBallx、SBally、null);
SHolder.unlockCanvasAndPost(我们的画布);//更新画布后解锁画布。。。
}
}
公共空间暂停(){
CanRun=false;
while(true){
试一试{
OurThread.join();
}捕捉(中断异常e){
e、 printStackTrace();
}
打破
}
OurThread=null;
}
公众简历(){
CanRun=true;
OurThread=新线程(此线程);
OurThread.start();
}
}
}

我找到了一种创建曲面视图并使用画布进行绘制的简单方法。互联网上大多数信息的问题在于,人们提供了不必要的代码……他们写得太多,或者包含了一些不需要包含的内容,以便向某人展示最简单的示例表单

下面是创建曲面并使用画布绘制的最简单示例形式(android 30)

当我查看代码时,更容易看到发生了什么,因为它没有太多的混乱。我希望教安卓工作室的人会这样做;保持简单,解释每个部分/论点等

package com.tester.android2dgame;

import android.view.SurfaceView;
import android.view.SurfaceHolder;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Paint;

public class MySurf extends SurfaceView {
private boolean playing = true; // this later will be used to determine if drawing can happen
Bitmap ball;
float SBallx = 0;
float SBally = 0;
char1 Ryu; // this is how you pass an instance of an object class

public MySurf(Context context){
    super(context);
    ball = BitmapFactory.decodeResource(getResources(), R.raw.ball);
    new Kanvis().start();
}

public class Kanvis extends Thread{

    @Override
    public void run(){
        while(true){
            draw();
        }
    }

    private void draw(){
        SurfaceHolder holder = getHolder();
        Canvas canvas = holder.lockCanvas();
        if (canvas != null){
            canvas.drawColor(Color.RED);
            Paint paint = new Paint();
            canvas.drawBitmap(Ryu.Anims.get("MovDown").get(0), SBallx, SBally, paint);
            //canvas.drawBitmap(ball, SBallx, SBally, paint);
            holder.unlockCanvasAndPost(canvas);
        }

    }


}