Image 为图像指定值
所以我正在尝试创建一个真正简单的骰子游戏…更像是一个掷骰子游戏,我遇到了一个我还没有找到答案的问题。很明显,我有6张模具面图像(1-6),但我缺少的是如何在“掷骰子”时基本上为这些图像赋值。因此,当我开始实现一些游戏逻辑时,我可以比较模具面的数量。这是我到目前为止所拥有的,和往常一样,任何帮助都将不胜感激Image 为图像指定值,image,dice,assign,Image,Dice,Assign,所以我正在尝试创建一个真正简单的骰子游戏…更像是一个掷骰子游戏,我遇到了一个我还没有找到答案的问题。很明显,我有6张模具面图像(1-6),但我缺少的是如何在“掷骰子”时基本上为这些图像赋值。因此,当我开始实现一些游戏逻辑时,我可以比较模具面的数量。这是我到目前为止所拥有的,和往常一样,任何帮助都将不胜感激 public class CrapsGameActivity extends CrapsActivity { private final int rollAnimations = 50
public class CrapsGameActivity extends CrapsActivity {
private final int rollAnimations = 50;
private final int delayTime = 15;
private Resources res;
private final int[] diceImages = new int[]{R.drawable.die1, R.drawable.die2,
R.drawable.die3, R.drawable.die4, R.drawable.die5,R.drawable.die6};
private Drawable dice[] = new Drawable[6];
private final Random randomGen = new Random();
private int diceSum;
private int roll[] = new int[] {6,6};
private ImageView die1;
private TextView die1_Total;
private int die1_number;
private ImageView die2;
private TextView die2_Total;
private TextView diceTotal;
private LinearLayout diceContainer;
private Handler animationHandler;
private long lastUpdate = -1;
private float x, y, z;
private float last_x, last_y, last_z;
private boolean paused = false;
private static final int UPDATE_DELAY = 50;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
paused = false;
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
setTitle(getString(R.string.app_name));
res = getResources();
for (int i = 0; i<6; i++){
dice[i] = res.getDrawable(diceImages[i]);
}
diceContainer = (LinearLayout) findViewById(R.id.diceContainer);
diceContainer.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
try{
rollDice();
die1_Total.setText("" + roll[0]);
die2_Total.setText("" + roll[1]);
diceTotal.setText(""+ diceSum);
}catch(Exception e) {};
}//end of onClick
});//end of onClick listener
die1 = (ImageView) findViewById(R.id.die1);
die1_Total = (TextView) findViewById(R.id.TV_die1);
die2 = (ImageView) findViewById(R.id.die2);
die2_Total = (TextView) findViewById(R.id.TV_die2);
diceTotal = (TextView) findViewById(R.id.TV_diceTotal);
animationHandler = new Handler(){
public void handleMessage(Message msg){
die1.setImageDrawable(dice[roll[0]]);
die2.setImageDrawable(dice[roll[1]]);
}//end of handle message
};//end of Handler
}
private void rollDice() {
if(paused) return;
new Thread(new Runnable(){
@Override
public void run(){
for(int i = 0; i < rollAnimations; i++){
doRoll();
}//end of for statement
}//end of run()
}).start();//end of thread
}//end of rollDice()
private void doRoll(){//only does a single roll
roll[0] = randomGen.nextInt(6);
roll[1] = randomGen.nextInt(6);
diceSum = roll[0] + roll[1] + 2;
synchronized(getLayoutInflater()){
animationHandler.sendEmptyMessage(0);
}
try{//delay for smooth animations
Thread.sleep(delayTime);
}catch(final InterruptedException e){
e.printStackTrace();
}
}//end of doRoll()
public void onResume(){
super.onResume();
paused = false;
}//end of onResume()
public void onPause(){
super.onPause();
paused = true;
}//end of onPause()
}//end of activity
这就是你的价值观。您不希望图像包含数据(或者至少,我不想麻烦)。相反,您可以基于这些值渲染图像/动画,然后可以在以后直接使用这些值
如果您想将值与图像一起存储,您可以创建一个对象(GameDie)并将图像和当前值存储在其中。这是不相关的,但是用
扩展垃圾活动发布代码可能会让你笑一笑。我想,嘿,如果我要长时间盯着代码看的话,我可能会从所谓的“小事”中得到一笑。它们显然是随机的,太“随机”了,无法对应任何死亡面孔,那么,如果这些数字是随机的,我首先应该如何使用它们呢?@FROSTYSMOOTH A 0对应于一卷1,A 1对应于一卷2,等等。您将图像以相同的顺序{face1,face2,face3,…}存储在数组中,然后它们匹配。除非您有理由将其设置为随机值0,以对应模具上的6面?显然,如果你想得到滚动的实际整数值,你仍然需要在每个模具上加1,但是当你把两个滚动相加时,你已经这样做了。那么我一定是做错了什么,因为当看着模拟器来测试这一点时,我有第一个模具的值为1,模具面为3,在另一个骰子上,我有一个1的值和一个2的面…所以两个骰子都有一个1的值,但是显示了不同的面值。它们是按顺序加载的,这就是为什么我觉得我完全搞糊涂了。@FROSTYSMOOTH,听起来这可能就是问题所在。如果您不知道要将哪个图像加载到阵列中的每个点,您将永远无法使其工作。所以,整理一下你是如何抓取图像并将它们映射到阵列的,然后你就可以开始了。
public void onClick(View v) {
try{
rollDice();
die1_Total.setText("" + roll[0]);
die2_Total.setText("" + roll[1]);
diceTotal.setText(""+ diceSum);
}catch(Exception e) {};
roll[0] = randomGen.nextInt(6);
roll[1] = randomGen.nextInt(6);