QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3088|回复: 7

一个想法,关于连线动作的动画效果

[复制链接]
发表于 2005-11-19 01:00:58 | 显示全部楼层 |阅读模式
想在连连看中加入多线程技术
对连线操作,实现类似于阿达连连看的那种绚丽的动画效果
赫赫
想法而已:)
目前我装的ML2.0rc1上还没有安装好anjuta,暂时还不会修改代码
发表于 2005-11-25 10:54:23 | 显示全部楼层
我觉得能动态的生成不同的图形比较有意思
回复

使用道具 举报

发表于 2005-11-25 11:36:29 | 显示全部楼层
你是不是可以这么做, 只是想着建议一下, 是不是不要专门用一个线程来画连线,

整个程序一共使用3个线程:
1。 主线程, 用来接受用户数据, 和更新背后数据结构和提示用户,这部分也负责gtk 的 gui 部分。
2。 渲染线程, 在固定的时间间隔内, 更新画面, 建议使用double buffer 来减少闪烁
3。 声音线程, 用来播放声音, 实现一个软mixer, 来支持多声音的同步播放。

注:线程2 只是用来更新你游戏的图像区, 只要把内存里的数据结构转到一个pixmap上, 然后flip一下。

我觉得这样做有2个最大的好处:
1。 游戏过程中, 玩家不会觉得有停滞感, 包括你的gui界面,
和图像显示,以及声音播放上。

2。 因为游戏显示使用了独立的线程, 对实现动态改变显示区域大小更加容易。

有1个问题, 一般而言, 显示线程负责全部的显示工作,
这样,改变分辨率也会非常的简单, 但是你这个是gtk做gui的,
带来了复杂性, 但是我感觉把gtk的主线程和游戏区的显示
分开要好一点, 但是还是值得商榷的。


建议完毕。  
回复

使用道具 举报

 楼主| 发表于 2005-11-25 11:54:23 | 显示全部楼层
呵呵,谢谢云帆
连连看,从0.3版开始就是使用的double buffer
所有绘图操作均不涉及UI
只是在需要刷新UI的时候刷新一下而已
所以,窗口缩放的问题是比较容易解决的.

声音确实应该独立线程,不然延迟比较明显
回复

使用道具 举报

发表于 2005-11-25 12:25:05 | 显示全部楼层
[quote:2b7e03840c="alpher"]呵呵,谢谢云帆
连连看,从0.3版开始就是使用的double buffer
所有绘图操作均不涉及UI
只是在需要刷新UI的时候刷新一下而已
所以,窗口缩放的问题是比较容易解决的.

声音确实应该独立线程,不然延迟比较明显[/quote]

that' good.  

画线的问题是不是可以这么处理
我的意思是, 可以有多个连线的数据同时存在,
画图不用管几个, 全部更新就好, 这样, 如果
玩家玩的快, 可以同时看到几个都在连
随便给个代码, 说明以下我的想法
[code:1]
enum ConnectType {EDirect, ELeft_Top, ELeft_Bottom, ERight_Top, ERight_Bottom}
typedef struct EraseTile{
    int src_x, src_y, dest_x, dest_y;
    ConnectType type;
    int pos_x, pos_y;
} EraseAction;
[/code:1]

因为显示更新独立, 那么用户鼠标事件就不会阻塞,
当用户选对一对时, 就多一个EraseTile这样的结构,
当显示线程执行的时候, 遍历一下, EraseAction 的list
就好


以上所言,纯属虚构, Good Luck mate !
回复

使用道具 举报

 楼主| 发表于 2005-11-25 12:52:05 | 显示全部楼层
我的想法是这样
在原来的
struct AlgorithmPoint{
        gint x;
        gint y;
};
里面填一个属性,
gint animation_clip;
标志当前在该点所显示的动画的桢数
然后没消一对牌,就吧需要显示连线动画的点放入一个list
显示动画的线程就每个一段时间(动画一桢的时间)刷新一个list中各个点处的图片,切换到下一桢
呵呵
这样如何
回复

使用道具 举报

发表于 2005-11-25 18:37:10 | 显示全部楼层
呵, 我也就是这个意思。
回复

使用道具 举报

 楼主| 发表于 2005-11-25 19:02:47 | 显示全部楼层
hoho
多谢云帆
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-4-19 09:43 , Processed in 0.094468 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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