适合在Canvas中实现跳棋棋盘游戏的模型,考虑到动画
Suitable model for a Checkers board game implemented in Canvas, with animations in mind
现在我有一个Board对象,它包含一个8x8的二维数组(我称之为网格),棋子用整数1/2表示,我使用按位操作将棋子标记为国王。
我也有一个Checkers对象,它处理板的渲染和用户在画布上的点击等。Checkers对象有一个Draw方法,它简单地迭代Board对象上的网格来创建棋盘的图形表示。因此,每次调用Draw()时,棋盘被重新绘制,棋子的位置被重新计算。
现在我想添加动画。我能够做到这一点的一种方法是跟踪最近的移动(源和目标X Y坐标),然后以设定的间隔运行Draw()
例程,并让Draw()
例程检查即将绘制的棋子的坐标是否与之前移动的目标变量中记录的坐标相同,并相应调整棋子的位置。
虽然这个可以工作,但我发现它有点乱。
我尝试的另一种模型是使用对象而不是整数,然后我可以记录碎片上的像素X Y坐标,并在每次移动后更新它们(或在动画循环中)。我也发现这很混乱,并且不喜欢我的board对象现在被绑定到渲染逻辑的方式。
在这方面有经验的人能提出更好的方法吗?值得注意的是,我在服务器端(NodeJS)上使用相同的Board类,所以理想情况下,我想在客户端和服务器上保持Board类相同,以确保客户端所做和验证的动作永远不会被服务器拒绝。
我建议你首先画出所有不移动的部分,然后沿着一些插值线从它的开始到结束位置(由时间给定)画出移动的部分。
老实说,对于这种复杂程度的图形,我会坚持使用HTML/CSS/jQuery,使用position: absolute
图像来表示片段。然后,您可以使用jQuery的动画函数来显示最后一块从它的开始到结束位置真的很容易(和参数,如swing
或linear
,以获得您想要的行为)。例如:
// Assumes pieces are objects with id and position properties
// and for each piece there is an image with id: piece.id
$('#'+piece.id).animate({
left: piece.position.x * board_scale,
top: piece.position.y * board_scale
});
你没有提到浏览器支持,但假设你只使用IE9+,我会坚持使用CSS3过渡,它允许非常流畅的动画,你的工作很少。动画可以硬件加速,甚至在移动设备上,这意味着它们通常是华丽的。
苹果公司已经使用这种技术制作了checkers演示:)
https://developer.apple.com/safaridemos/checkers.php// css
.piece {
-webkit-transition: all ease-in .75s;
-moz-transition: all ease-in .75s;
transition: all ease-in .75s;
}
// js
var aPiece = document.getElementById('aPiece');
var newLocation = "translate(20px, 30px)";
aPiece.style.webkitTransform = newLocation;
aPiece.style.mozTransform = newLocation;
aPiece.style.transform = newLocation;
这将自动为您动画:)
如果你想使用canvas:
使用两个,位置正好在彼此上方。
然后,取下一个,绘制所有的静态元素。
上面的一个只绘制动画,即移动的元素。
这将为您提供最佳性能,因为只有更改的元素需要重新绘制。
- 在VanillaJS中模拟模型双向数据绑定
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 为集合分配大量的模型弹药
- 如何使用backbone.js从集合中获取模型名称
- 如何有效地将游戏数据存储在URL查询字符串中
- Javascript游戏输入失去焦点
- 如何在p5.js中管理多智力竞赛游戏的多个屏幕
- 骨干模型默认值-todos.js示例中不必要的代码
- EmberJS中支持单字母单词模型
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- 将不在模型中的数据返回到mvc控制器
- 如何在视图模型contet更新更新上调用Jquery函数
- 如何使用Javascript客户端对象模型检索Sharepoint 2010列表项权限
- 我应该如何检查主干.主干.模型更改时查看
- 在网络象棋游戏中,经常使用哪种服务器推送技术来刷新双人浏览器上的棋盘
- 多画布棋盘游戏对单画布
- 棋盘游戏在javascript中,同步问题卡
- 适合在Canvas中实现跳棋棋盘游戏的模型,考虑到动画
- 实现在游戏脚本环境中使用自定义对象模型的jQuery
- 网页游戏中的客户端和服务器模型