alpher 发表于 2005-11-19 01:00:58

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

想在连连看中加入多线程技术
对连线操作,实现类似于阿达连连看的那种绚丽的动画效果
赫赫
想法而已:)
目前我装的ML2.0rc1上还没有安装好anjuta,暂时还不会修改代码

beyond2004 发表于 2005-11-25 10:54:23

我觉得能动态的生成不同的图形比较有意思

yunfan 发表于 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的主线程和游戏区的显示
分开要好一点, 但是还是值得商榷的。


建议完毕。:mrgreen:

alpher 发表于 2005-11-25 11:54:23

呵呵,谢谢云帆
连连看,从0.3版开始就是使用的double buffer
所有绘图操作均不涉及UI
只是在需要刷新UI的时候刷新一下而已
所以,窗口缩放的问题是比较容易解决的.

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

yunfan 发表于 2005-11-25 12:25:05

呵呵,谢谢云帆
连连看,从0.3版开始就是使用的double buffer
所有绘图操作均不涉及UI
只是在需要刷新UI的时候刷新一下而已
所以,窗口缩放的问题是比较容易解决的.

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

that' good.:lol:

画线的问题是不是可以这么处理
我的意思是, 可以有多个连线的数据同时存在,
画图不用管几个, 全部更新就好, 这样, 如果
玩家玩的快, 可以同时看到几个都在连
随便给个代码, 说明以下我的想法

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;


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


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

alpher 发表于 2005-11-25 12:52:05

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

yunfan 发表于 2005-11-25 18:37:10

呵, 我也就是这个意思。 :P

alpher 发表于 2005-11-25 19:02:47

hoho
多谢云帆
页: [1]
查看完整版本: 一个想法,关于连线动作的动画效果