标签:官方 更改 共享 ... font speed 不同的 down 更新
桌面冰球游戏中使用的类与对象说明
Ball 类:
class Ball:public QGraphicsItem
成员属性:
Speed:速度
Angle:运动方向
Ratio:图形比例
Radius:球的半径
操作属性:
Advance:根据单位采样时间前进;
xvel =speed*1.0/FRECUENCY *qCos(angle);
yvel = speed*1.0/FRECUENCY *qSin(angle);
collisionCalcualte(collisionType direction)//计算碰撞后的速度和方向
setPos():设置位置
void setSpeed(qreal);
void setAngle(qreal);
GraphWidget类
成员属性:
GameWidget * game;创建父对象的指针,便于传递信息
QPointF ballPosition;球的位置
QPointF HandlePosition; 操作手柄的位置
timerId; 定时器id,定时器用于产生基本的更新时间周期
Ball *ballmove; 冰球
Frame *frame; 边框
Frame * frameUp;
Frame * frameLeft;
Frame * frameDown;
Frame * frameRight;
userHandle * userhandle; 手柄
QGraphicsScene *scene;场景对象,将item加入其中
gameScoreText:得分文本
操作属性:
timerEvent:定时器回应函数:
获取当前ball、Handle位置信息,传递给上层gamewidget
进行碰撞检测:获取碰撞信息传递给Ball用于更新速度
获取碰撞信息,决定游戏状态
运动物体的运动更新ballmove->advance();
GameWidget类
成员属性:
QLabel *labelBall
QLabel *labelHandle
QLineEdit *editBall:显示当前球的坐标(单位:像素)
QLineEdit *editHandle:显示当前Handle的坐标(单位:像素)
GraphWidget *showwidget:游戏动画界面对象
操作属性:
setPosition():获取下一级成员showwidget的position属性,显示到界面上
动作:
等待开始:
暂停:
进球之后触发的事件:
球的位置复原;
更新分数;
重置:
球的位置复原;
分数重置;
编程技巧与错误总结:
基本的编程语法要熟悉,比如if语句,case语句,语句的排列顺序暗含了一定的优先级,if...if 和if...else if 是不同的,在代码段中加上return、continue、break等语句可能产生不同的效果。
固定的可更改的参数,例如周期频率、弧度PI等可以用宏定义实现,方便更改。
一系列的状态可以用enum枚举类型实现,字面意义很明确
充分利用Qt的信号与槽机制,完成数据的共享与信息的传递,自身的信号和槽能够和另外的一个类的信号与槽连接。单向的信息传递只需要用简单的信号与槽的连接实现。
不认识的类与函数要主动在网上查询。不断尝试看帮助文档,许多的类属性功能的特点都是类似的,甚至是可以猜测出来的,逻辑都十分清楚。函数功能不一定要记住,但是应该基本熟悉,掌握套路。书本上和官方的例程。
不同的功能用不同的类实现,特定的功能放置在相应的类中实现。
在有一定的基础的前提下,可以预先设计相应的类,写出想要的属性和操作,不同的类之间减少耦合,独享和共享的数据分离开,信号的传递方向要明确。
标签:官方 更改 共享 ... font speed 不同的 down 更新
原文地址:http://www.cnblogs.com/tangyuanjie/p/6246928.html