`
androidyo
  • 浏览: 64667 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

更新游戏画面时线程的问题

阅读更多
作者daytodayme
http://www.iteye.com/topic/435147

调用Handler.post(Runnable r)方法,Runnable运行在UI所在线程,所以可以直接调用View.invalidate()


引用
package com.ray.test; 
 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
 
public class TestHandler extends Activity { 
    private MyView myView; 
    private Handler mHandler; 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        myView = new MyView(this); 
        mHandler = new Handler(); 
        mHandler.post(new Runnable(){ 
            @Override 
            public void run() { 
                myView.invalidate(); 
                mHandler.postDelayed(this, 5); 
            } 
         }); 
        setContentView(myView); 
    } 
     
    class MyView extends View{ 
        private float x = 0f; 
        public MyView(Context context) { 
            super(context); 
             
    } 
        protected void onDraw(Canvas canvas) { 
            super.onDraw(canvas); 
            x+=1; 
            Paint mPaint = new Paint(); 
            mPaint.setColor(Color.BLUE); 
            canvas.drawRect(x, 40, x+40, 80, mPaint); 
        } 
         
    } 



在新线程里更新UI,可以直接postInvalidate()

public void onCreate(Bundle savedInstanceState) {      
               super.onCreate(savedInstanceState);      
               this.requestWindowFeature(Window.FEATURE_NO_TITLE);      
     
               myView = new MyView(this);  
       this.setContentView(this.myView);      
       new Thread(new myThread()).start();     
}      
    
    class myThread implements Runnable {      
          public void run() {     
              while (!Thread.currentThread().isInterrupted()) {      
                   try {  
                          myView.postInvalidate();   
                        Thread.sleep(100);       
                   } catch (InterruptedException e) {      
                        Thread.currentThread().interrupt();      
                   }      
               }      
          }      
    }   

分享到:
评论

相关推荐

    多线程游戏坦克大战

    例如,一个线程负责游戏画面的更新,另一个线程则处理用户的操作,这样即使在计算密集型操作时,也能保证游戏界面的流畅显示。 在实现多线程时,开发者通常会用到Java或C++等编程语言的线程库,如Java的`java.lang....

    多线程打字游戏

    1. **主线程**:负责游戏的整体控制和协调,如初始化界面、处理用户输入以及游戏结束时的结算。 2. **显示线程**:用于实时显示待打的文本,确保文字流畅滚动,不因输入处理而阻塞。它可能包含一个缓冲区,存储即将...

    打字游戏 运用多线程实现

    3. **UI更新线程**:游戏界面的更新,包括显示计分、提示信息、游戏状态等,应该在一个与游戏逻辑分离的线程中进行。这样可以确保即使游戏逻辑线程在进行复杂计算,UI仍然能够及时刷新,提供良好的视觉反馈。 4. **...

    java弹球小游戏,多线程

    主线程通常负责游戏的主循环,它不断地绘制游戏画面、更新游戏状态。例如,在Java中,我们可以利用`javax.swing.JFrame`和`javax.swing.Timer`来创建窗口和定时器,定时器每隔一定时间调用回调方法,更新游戏状态并...

    多线程游戏-snake贪吃蛇

    蛇的移动线程负责计算蛇的位置并更新游戏界面,而食物生成线程则定时在合适的位置创建新的食物,增加游戏的挑战性。 1. **线程基础**:在Java中,我们可以使用`Thread`类或者实现`Runnable`接口来创建线程。创建一...

    线程实现抽奖游戏 线程 抽奖

    如果抽奖结果需要在UI上实时更新,那么就需要确保更新操作是线程安全的,例如通过使用`SwingUtilities.invokeLater()`方法来更新UI组件,这样可以确保在事件调度线程中执行,防止出现线程冲突。 总的来说,这个项目...

    C#打字游戏(关于多线程)

    3. **用户界面更新线程**:在用户完成打字后,更新游戏界面,如显示正确和错误的字符,以及当前的打字速度。由于UI更新通常涉及到控件的操作,C#中通常使用`Control.Invoke`或`Control.BeginInvoke`来保证在UI线程中...

    Java多线程赛马游戏

    【Java多线程赛马游戏】是一个通过Java编程语言实现的互动小游戏,它巧妙地结合了多线程技术和Swing图形用户界面库。这个项目旨在展示如何在Java中创建并发执行的任务,模拟赛马比赛的过程,并提供用户友好的图形...

    多线程雷电游戏

    9. **异常处理**:由于多线程可能导致的不确定性和并发问题,异常处理是必不可少的,以确保游戏在遇到错误时能优雅地处理而不是崩溃。 10. **源码分析**:博客中提供的源码可能是分析的重点,通过阅读和学习,读者...

    多线程小游戏

    游戏中的“bar”文件夹可能包含了游戏的进度条、生命值条等元素的图片,这些都是游戏界面不可或缺的部分,通过动态更新这些元素的状态,可以让玩家直观地了解游戏进程。 地图("map")是游戏世界的基础,它定义了...

    JAVA多线程游戏之简易飞机大战

    2. **渲染线程**:独立于主循环,负责绘制游戏画面,保证视觉效果的流畅。 3. **输入处理线程**:监听用户的键盘或鼠标输入,实时响应玩家的操作。 4. **音频播放线程**:处理背景音乐和音效播放,确保声音的同步和...

    C# 多线程 打字游戏 附源码 适合新手

    4. **UI更新**:游戏界面的更新应该在UI线程上进行,以避免界面无响应。因此,可能使用了`Control.Invoke`或`Control.BeginInvoke`来在UI线程中执行更新操作。 5. **性能优化**:多线程可以提高性能,但过度使用也...

    java 多线程 打字游戏

    【Java多线程打字游戏】是一个非常适合Java初学者学习的项目,它涵盖了Java编程语言中的几个关键概念,包括多线程、AWT(Abstract Window Toolkit)和Swing图形用户界面库。在这个打字游戏中,玩家需要在限定时间内...

    C#多线程写的打字游戏Demo

    游戏通常有一个主循环,负责处理用户输入、更新游戏状态和渲染画面。多线程可以用来实现并发的游戏逻辑,例如一个线程处理用户输入,另一个线程处理游戏逻辑,从而提高游戏性能。 七、事件和委托 C#中的事件和委托...

    java多线程实现五子棋游戏

    3. **用户交互**:用户界面(UI)允许玩家点击选择落子位置,游戏逻辑需要监听这些事件,处理玩家的动作,并更新棋盘状态。 4. **游戏状态管理**:包括游戏开始、进行中、结束等状态的管理,以及平局、胜利等判断。...

    运用多线程编程球体游戏

    在本游戏中,可能需要确保在任何时刻只有一个线程能够更新小球的状态。 最后,为了使用户界面(UI)保持流畅,开发者可能使用了双缓冲技术,即在后台创建一个缓冲区绘制新的小球位置,然后一次性将缓冲区的内容复制...

    JAVA编写的多线程小弹球测试

    这个程序的特点是弹球会随机出现、随机选择颜色,并且在碰到边界时能自动反弹,充分展示了多线程技术在游戏和图形用户界面中的应用。 首先,我们需要理解Java中的线程。在Java中,每个运行的程序都至少有一个线程,...

Global site tag (gtag.js) - Google Analytics