我正在实施游戏。我想在游戏到达特定位置时开始一项新活动。我是这个网站的新手,如果我在我的问题中缺少一些东西,请告诉我将编辑。
我的Game.java文件有以下几点:
Game.java
package com.example.experiment;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.MotionEvent;
import android.view.View;
public class Game extends View
{
int i=0,j=0;
int hei=0,wid=0,div=0;
int MoUp=0,MoUpDo=0,Rd;
float TouchXU=0,TouchYU=0,TouchXD=0,TouchYD=0;
float CirX,CirY;
int Score=0,FinalScore;
boolean MoveUp=false,Move=false,NextObs=false;
Path Rpath=new Path();
Paint paint=new Paint();
String ScoreStr="";
GamEnd g=new GamEnd(getContext());
Intent intent=new Intent();
Context context;
public Game(Context context)
{
super(context);
}
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
paint.setAntiAlias(true);
setBackgroundColor(Color.parseColor("#3E8E21"));
MainPath(canvas);
Obstacle1(canvas);
Ball(canvas);
Scores(canvas);
}
public void Ball(Canvas canvas)
{
CirX=getWidth()/2;
CirY=(getHeight()/2+getHeight()/4);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.FILL);
if(i<9)
{
postInvalidateDelayed(40);
canvas.drawCircle(CirX, CirY+i, 30, paint);
i+=3;
Score+=10;
}
else if(MoveUp==true)
{
if(MoUp<200)
{
postInvalidateDelayed(30);
canvas.drawCircle(CirX, CirY+i-MoUp, 30, paint);
MoUp+=40;
Score+=10;
}
else
{
postInvalidateDelayed(25);
canvas.drawCircle(CirX, CirY+i-j+MoUpDo-MoUp, 30, paint);
MoUpDo+=40;
Score+=10;
if(MoUpDo==200)
{
MoUp=0;
MoUpDo=0;
MoveUp=false;
}
}
}
else
{
postInvalidateDelayed(40);
canvas.drawCircle(CirX, CirY+i-j, 30, paint);
j+=3;
Score+=10;
if(j==9)
{
i=0;
j=0;
}
}
if(hei>=CirY-15 && hei<=CirY+10 && MoveUp==false)
{
FinalScore=Score;
Intent in=new Intent(context,GameEndActivity.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(in);
}
}
public void MainPath(Canvas canvas)
{
paint.setColor(Color.parseColor("#EE874B"));
paint.setStyle(Paint.Style.FILL);
Rpath.moveTo(getWidth()/2-getWidth()/6,0);
Rpath.lineTo(getWidth()/2+getWidth()/6,0);
Rpath.lineTo(getWidth()/2+getWidth()/3,getHeight());
Rpath.lineTo(getWidth()/2-getWidth()/3,getHeight());
Rpath.lineTo(getWidth()/2-getWidth()/6,0);
canvas.drawPath(Rpath, paint);
Rpath.reset();
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
TouchXD=(float)event.getRawX();
TouchYD=(float)event.getRawY();
break;
case MotionEvent.ACTION_UP:
TouchXU=(float)event.getRawX();
TouchYU=(float)event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
Move=true;
break;
}
if(TouchYD>TouchYU && Move==true)
{
MoveUp=true;
Move=false;
}
return true;
}
public void Scores(Canvas canvas)
{
paint.setColor(Color.parseColor("#4CB028"));
paint.setTextSize(20);
paint.setTextSkewX((float) 0.1);
paint.setFakeBoldText(true);
ScoreStr=String.valueOf(Score);
canvas.drawText(ScoreStr, 10, 30, paint);
}
public void Obstacle1(Canvas canvas)
{
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(20);
canvas.drawLine(getWidth()/2-getWidth()/6-wid, hei, getWidth()/2+getWidth()/6+wid, hei, paint);
float heiDiv=getHeight()/40;
float widDiv=(getWidth()/3-getWidth()/6)/40;
wid+=widDiv;
hei+=heiDiv;
if(hei>=getHeight())
{
NextObs=true;
hei=0;
wid=0;
Obstacle1(canvas);
}
}
}
GameEndActivity.java
package com.example.experiment;
import android.app.Activity;
import android.os.Bundle;
public class GameEndActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new GameEnd(this));
}
}
GameEnd.java
package com.example.experiment;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class GameEnd extends View
{
Paint paint=new Paint();
public GameEnd(Context context)
{
super(context);
}
@Override
public void onDraw(Canvas canvas)
{
setBackgroundColor(Color.BLACK);
paint.setColor(Color.YELLOW);
paint.setTextSize(50);
canvas.drawText("Hello", 10, 100, paint);
}
}
我的错误日志
08-28 09:24:20.120: E/AndroidRuntime(1153): FATAL EXCEPTION: main
08-28 09:24:20.120: E/AndroidRuntime(1153): Process: com.example.experiment, PID: 1153
08-28 09:24:20.120: E/AndroidRuntime(1153): java.lang.NullPointerException
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.content.ComponentName.<init>(ComponentName.java:77)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.content.Intent.<init>(Intent.java:3813)
08-28 09:24:20.120: E/AndroidRuntime(1153): at com.example.experiment.Game.Ball(Game.java:94)
08-28 09:24:20.120: E/AndroidRuntime(1153): at com.example.experiment.Game.onDraw(Game.java:39)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.View.draw(View.java:14465)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.View.draw(View.java:14350)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.View.draw(View.java:14348)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.View.draw(View.java:14348)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.View.draw(View.java:14468)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.widget.FrameLayout.draw(FrameLayout.java:472)
08-28 09:24:20.120: E/AndroidRuntime(1153): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2326)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2496)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2409)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2253)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1883)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.Choreographer.doFrame(Choreographer.java:544)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.os.Handler.handleCallback(Handler.java:733)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.os.Handler.dispatchMessage(Handler.java:95)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.os.Looper.loop(Looper.java:136)
08-28 09:24:20.120: E/AndroidRuntime(1153): at android.app.ActivityThread.main(ActivityThread.java:5017)
08-28 09:24:20.120: E/AndroidRuntime(1153): at java.lang.reflect.Method.invokeNative(Native Method)
08-28 09:24:20.120: E/AndroidRuntime(1153): at java.lang.reflect.Method.invoke(Method.java:515)
08-28 09:24:20.120: E/AndroidRuntime(1153): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-28 09:24:20.120: E/AndroidRuntime(1153): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-28 09:24:20.120: E/AndroidRuntime(1153): at dalvik.system.NativeStart.main(Native Method)
我收到了NullPointerException。
请帮忙。
答案 0 :(得分:1)
更改此构造函数
public Game(Context context)
{
super(context);
this.context = context;
}
答案 1 :(得分:0)
如果我的问题正确,则崩溃发生在Ball()
方法中。 LokiSinclair是对的,我们需要Game.java的代码,并且最好还需要堆栈跟踪100%确定NPE的抛出位置。
尽管如此,问题很可能是context
未正确设置。
请检查一下。
答案 2 :(得分:0)
您忘记将传入上下文设置为Game的上下文属性
public Game(Context context) {
super(context);
this.context = context;
}
或删除该属性并使用视图的上下文:
Intent in = new Intent(((Activity)getContext()),GameEndActivity.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
((Activity)getContext()).startActivity(in);
查看getContext()返回运行视图的上下文 它可以访问当前的主题,资源等。