Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 780|回复: 0

Android 游戏 界面组件 GamaView - Android学习

[复制链接]

该用户从未签到

发表于 2011-10-27 08:16:26 | 显示全部楼层 |阅读模式
       GameView主要就是根据游戏的状态数据来绘制界面上的方块,GameView继承了View组件,重写了View组件上onDraw(Canvas canvas)方法,重写该方法主要就是绘制游戏里剩余的方块;除此之外,它还会负责绘制连接方块的连接线。

  GamaView的代码如下。

java代码:
public class GameView extends View
{
    // 游戏逻辑的实现类
    private GameService gameService;          //①
    // 保存当前已经被选中的方块
    private Piece selectedPiece;
    // 连接信息对象
    private LinkInfo linkInfo;
    private Paint paint;
    // 选中标识的图片对象
    private Bitmap selectImage;
    public GameView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        this.paint = new Paint();
        // 设置连接线的颜色
        this.paint.setColor(Color.RED);
        // 设置连接线的粗细
        this.paint.setStrokeWidth(3);
        this.selectImage = ImageUtil.getSelectImage(context);
    }
    public void setLinkInfo(LinkInfo linkInfo)
    {
        this.linkInfo = linkInfo;
    }
    public void setGameService(GameService gameService)
    {
        this.gameService = gameService;
    }
    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        if (this.gameService == null)
            return;
        Piece[][] pieces = gameService.getPieces();            //②
        if (pieces != null)
        {
            // 遍历pieces二维数组
            for (int i = 0; i < pieces.length; i++)
            {
                for (int j = 0; j < pieces.length; j++)
                {
                    // 如果二维数组中该元素不为空(即有方块),将这个方块的图片画出来
                    if (pieces[j] != null)
                    {
                        // 得到这个Piece对象
                        Piece piece = pieces[j];
                        // 根据方块左上角X、Y坐标绘制方块
                        canvas.drawBitmap(piece.getImage().getImage(),
                            piece.getBeginX(), piece.getBeginY(), null);
                    }
                }
            }
        }
        // 如果当前对象中有linkInfo对象, 即连接信息
        if (this.linkInfo != null)
        {
            // 绘制连接线
            drawLine(this.linkInfo, canvas);
            // 处理完后清空linkInfo对象
            this.linkInfo = null;
        }
        // 画选中标识的图片
        if (this.selectedPiece != null)
        {
            canvas.drawBitmap(this.selectImage, this.selectedPiece.
            getBeginX(),
                this.selectedPiece.getBeginY(), null);
        }
    }
    // 根据LinkInfo绘制连接线的方法
    private void drawLine(LinkInfo linkInfo, Canvas canvas)
    {
        // 获取LinkInfo中封装的所有连接点
        List&ltoint> points = linkInfo.getLinkPoints();
        // 依次遍历linkInfo中的每个连接点
        for (int i = 0; i < points.size() - 1; i++)
        {
            // 获取当前连接点与下一个连接点
            Point currentPoint = points.get(i);
            Point nextPoint = points.get(i + 1);
            // 绘制连线
            canvas.drawLine(currentPoint.x, currentPoint.y,
                nextPoint.x, nextPoint.y, this.paint);
        }
    }
    // 设置当前选中方块的方法
    public void setSelectedPiece(Piece piece)
    {
        this.selectedPiece = piece;
    }
    // 开始游戏方法
    public void startGame()
    {
        this.gameService.start();
        this.postInvalidate();
    }
}

       上面的GameView中第一段粗体字代码用于根据游戏的状态数据来绘制界面中的所有方块,第二段粗体字代码则用于根据LinkInfo来绘制两个方块之间的连接线。
回复

使用道具 举报

该用户从未签到

发表于 2012-3-26 23:28:10 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 23:57 , Processed in 0.383728 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表