我正在制作一款战略游戏,但它一直在崩溃。
我正在使用九个按钮来玩游戏。按钮默认颜色为灰色,两个玩家可以玩游戏。
第一个玩家可以选择三个按钮(红色),第二个玩家可以选择三个按钮(绿色)。
然而,问题是我触摸另一个按钮(灰色),除了六个以上。
应用程序崩溃了,我不知道为什么。代码如下。
所有按钮操作都会调用列出的函数check()
和moves()
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(flag==0) {
check(b1, color1);
}
moves(b1);
// Toast.makeText(getApplicationContext(),""+b1.getText(),Toast.LENGTH_LONG).show();
}
});
功能:
void check(Button bn,int c)
{
if (plyr == 1 && plyr1 >0&&c==Color.LTGRAY)
{
bn.setBackgroundColor(Color.RED);
bn.setText("RED");
plyr1--;
plyr = 2;
t1.setBackgroundColor(Color.LTGRAY);
t2.setBackgroundColor(Color.GREEN);
}
else if (plyr == 2 && plyr2>0&&c==Color.LTGRAY)
{
bn.setBackgroundColor(Color.GREEN);
bn.setText("GREEN");
plyr2--;
plyr = 1;
t2.setBackgroundColor(Color.LTGRAY);
t1.setBackgroundColor(Color.RED);
}
else if (plyr1 == 0 && plyr2 == 0)
{
flag = 1;
}
}
void moves(Button bn)
{
ColorDrawable btnclr=(ColorDrawable)bn.getBackground();
int s=btnclr.getColor();
if(s==Color.RED)
{
Toast.makeText(getApplicationContext(),"Exception GREEN",Toast.LENGTH_LONG).show();
}
else if(s==Color.LTGRAY)
{
}
else
{
Toast.makeText(getApplicationContext(),"else",Toast.LENGTH_LONG).show();
}
}
int adjsnt(Button adjlbl, Button rem)
{
if(rem.getText()=="b2")
{
Toast.makeText(getApplicationContext(),"Exception",Toast.LENGTH_LONG).show();
return 1;}
return 0;
}
log cat
java.lang.ClassCastException:android.graphics.drawable.PaintDrawable无法强制转换为android.graphics.drawable.ColorDrawable 在com.solutions.techblaze.nera.Nera_main.moves(Nera_main.java:250) 在com.solutions.techblaze.nera.Nera_main $ 8.onClick(Nera_main.java:171) 在android.view.View.performClick(View.java:4856) 在android.view.View $ PerformClick.run(View.java:19956) 在android.os.Handler.handleCallback(Handler.java:739) 在android.os.Handler.dispatchMessage(Handler.java:95) 在android.os.Looper.loop(Looper.java:211) 在android.app.ActivityThread.main(ActivityThread.java:5389) at java.lang.reflect.Method.invoke(Native Method) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1020) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
答案 0 :(得分:2)
正如日志所说,PaintDrawable无法强制转换为ColorDrawable。
当您执行ColorDrawable btnclr=(ColorDrawable)bn.getBackground();
时,您假设getBackground的结果是ColorDrawable。但在这种情况下,它不是。这可能是因为您还没有在这些视图上设置setBackgroundColor
的颜色。
您可以做的一件事是在投射之前简单检查getBackground
返回的对象是否是ColorDrawable
的实例:
if(bn.getBackground() instanceof ColorDrawable)
您可以做的另一件事是将运行时的颜色设置为所有视图。 setBackgroundColor
会始终为您的观看次数设置ColorDrawable
。