流星中的动画
Animations in Meteor
我正在做一个纸牌游戏项目,我现在面临的问题之一是动画。我只是不知道如何正确地设置卡片的动画,以便两个用户都能同时看到它的动画,并找到正确的位置。我的意思是,当你的对手抽到一张牌时,你会看到一张牌从对手的牌组进入他的手部,而对于对手来说,动画是从他的牌组进入到他的手部。
我试过使用jQuery动画,但我只能做动画的一部分——不能代表对手的动画。
我也试过一些Atmosphere的软件包,但它们并没有按照我想要的方式工作。
我试图制作动画的卡片集合有一个卡片的位置字段(手、牌组、掉落等)。HTML中的每个元素都取决于从中获取卡片的位置域,例如:
Template.playerHand.cards = () ->
Cards.find {userId: Meteor.userId(), place: "hand"}
HTML是:
<ul class="holder">
{{#each cards}}
<li><img src="{{card.image}}" /></li>
{{/each}}
</ul>
有可能根据之前的位置来制作卡片的动画吗?就像一张牌在牌组中,然后它移到手上,就会运行特定的动画。从手到甲板也是如此。谢谢
用这么少的代码很难诊断出这一点,但我猜类似的事情正在发生:
玩家A抽一张牌:
- 玩家A几乎立即看到动画。这是因为当绘制卡片时调用的任何代码(例如,卡片集合中的更新)都是玩家a的客户端模拟代码,这会在服务器知道卡片已经绘制之前立即触发动画
- 玩家B在几秒钟后看到动画。这是因为玩家B需要等待抽卡代码(卡集合中的更新)从玩家A的浏览器同步到服务器,然后从服务器返回到玩家B的浏览器
如果这是动画时间变化的原因,则解决方案是防止播放器A的浏览器模拟触发动画的数据库更新。换句话说,第一台了解抽卡的机器应该是服务器,它可以大致同时将消息同步到两名玩家。有两种方法可以实现这一点:
- 在绘图时更新数据库的功能中使用
this.isSumulation
。基本上,将数据库更新代码保存在类似if (!this.isSimulation)
的块中,以便它只在服务器上执行 - 通过Meteor方法绘制卡片。所以玩家A会抽一张牌,这会导致
Meteor.call("drawCard")
,然后drawCard
方法会在服务器上执行。(userId
在this
内一起发送)。在/server
文件夹或Meteor.isServer
块中的文件中定义drawCard
方法,这样客户端就看不到它的代码,这意味着他们无法模拟它
无论哪种方式,数据库更新都会首先在服务器上进行,然后或多或少地同时同步到所有客户端,这应该会在大约相同的时间触发动画。
如果动画发生在不同的时间,是因为你的客户端连接速度截然不同(即一个在宽带上,一个在手机上),那么就需要一整套其他的补偿技术。但由于这是一个流星问题,我认为你的问题与流星有关,而不是一般的网络问题。如果我错了,请随意编辑你的问题,我或社区可以为Meteor发布一些滞后补偿技术。
- 如何设置html元素填充的动画
- 如何使用动画实现纸张推车
- 如何在生成下载文件时显示加载动画
- 剑道网格jQuery动画()问题
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- jQuery Lazy加载动画滚动
- jquery动画可以通过编程链接吗
- Javascript将数学动画化
- 动画.CSS重播
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 如何使用铁流星与流星的默认路线
- 如何使用jQuery在动画中期加速动画
- 流星中的动画
- 流星:动画(淡入/淡出)动态模板数据
- 流星与JQuery或动画的交互
- 流星动画
- 动画实时变化的流星问题
- 流星动画添加的项目
- 流星:删除一个帖子,并用_uihooks将其他帖子动画化
- 在流星JS,如何控制Javascript加载顺序相对于DOM加载顺序?为动画