1

好的,我决定省略任何代码只是因为我认为大多数人都会理解我正在尝试做的事情。

基本上我有 Layout、一个 TextView 和一个名为 GameGraphics 的自定义视图,它们都以编程方式添加到我的 Activity 的 onCreate 中。GameGraphics 视图是一个自定义视图,所有交互和绘图(基本游戏)都在其中进行。TextView 显示分数或当前玩家回合等信息。

游戏的整个交互发生在我添加了 OnTouchListener 的 GameGraphics 构造函数中,即

    this.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
             // ALL GAME LOGIC GOES HERE    
                            }
                           return true;
     }});

现在,我可以让自定义视图占用整个屏幕并将文本反馈绘制到画布上,但是,出于学习的目的,我想使用 TextView。所以我正在尝试如何弄清楚如何随着游戏的进行更改 TextView 文本,即从 GameGraphics 自定义视图中。所以最终我试图让 TextView “监听”自定义 GameGraphics 视图并使用分数、currentPlayer 等变量重绘自身。

我确实明白我试图去做的事情是行不通的......我猜你不能让一个 View 要求另一个 View 在该 View 仍在绘制时重绘自己......或类似的东西。

我真的没主意了。我假设我可能会弄清楚如果有人可以告诉我一些关于拥有按钮的事情,并且当按下该按钮时,TextView 的文本会更改为其他内容。我猜这最终是我想要做的吗?

在此期间我会继续寻找...

4

2 回答 2

0

该解决方案归结为使用 Java 语言元素。我们所做的是创建一个抽象监听器类作为控制游戏视图的同一类的成员。然后在活动中创建该类的实例并实现您创建的抽象方法。

class gameGraphics
{
   public abstract class DataListener
   {
      public abstract void updateScore(String data);
   }
   private DataListener listener;
   public gameGraphics(DataListener listener){
      this.listener = listener;
   }
   private TheMethodThatGetsCalledWhenThingsChange(){
       this.listener.updateScore(...DATA....);
   }
}

class mainActivity extends Activity
{
   @Override
   public onCreate(...stuff...){
       ...on create stuff...
       new gameGraphics(new DataListener{
           public void updateScore(String data){
              ...set the listview...
           }
       }); 
   }
}
于 2012-04-11T13:04:59.477 回答
0

您是否可以在主 Activity 中而不是在 GameGraphics 类中执行游戏逻辑?这样你就可以处理你创建的 TextView 对象,并且可以随时在 TextView 上使用 .setText("your string") 。希望这会有所帮助,如果我误解了,请告诉我。

于 2012-04-11T12:57:08.533 回答