- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了保持我自己的编码技能,我最近一直在构建一个版本的 this game (Blockblaster) 在 Java 中使用 JavaFx 2.0。因为它只是为了我的利益,所以没有真正考虑软件模式或设计,所以所有的游戏逻辑最终都在 GUI 类中,随着我添加功能,它变得越来越臃肿。我最终决定重构代码库,将游戏逻辑和模型与演示(GUI)分开。
经过一番研究,我决定使用 MVC 或 MVP 之类的东西。在这样做的过程中,我决定动画(方块在触发时向上滑动游戏网格,方块在从游戏中移除时闪烁等)是 View 层的一部分。
这导致的问题是,当用户启动一个块并且 Controller 告诉 View 移动块时,它会创建 JavaFx timeline
用于动画和调用 timeline.play()
.这样做不会导致程序流在动画发生时在 View 中暂停,因此 View 方法返回刚刚开始动画意味着 Controller 然后继续检查以查看该块是否已构成一组块如果是这样,在移动动画到达任何地方之前删除它们。
在旧的(讨厌的)实现中,我使用了 timeline.onFinish
动画完成后调用块组检查,但作为 timeline
现在在 Controller 中的 View 和检查功能中,我不知道如何将其放入我的新设计中。
有没有一种方法可以等待 JavaFx 动画完成(不使应用程序线程休眠),或者我应该使用不同的设计模式来帮助避免这些问题吗?
来自 Controller 的代码
public void fire()
{
//Get the current column the launcher is in.
int x = launcher.getX(), startY = launcher.getY();
//Find the next available block in the column.
int endY;
for(endY = h; endY > 0 && blockMap[endY - 1][x] == null; endY--){}
//Create a new block of the same colour and location as that on the launcher.
addBlock(x, launcher.getY(), getCurrentColourAndRotate());
//Move the block in the GUI and model (this will trigger the animation in the GUI)
moveBlock(x, startY, x, endY);
//Remove any block groups that have been made.
checkBlock(blockMap[endY][x]);
//Remove any blocks now not connected to the top of the game grid
removeUnconnectedBlocks();
}
最佳答案
好的,所以这是匆忙完成的,但是假设 Block 是您按下的方块,而 Group 是 3 个或更多与我的绘图中颜色相同的相邻块的集合,那么您遇到的麻烦是您用同样的方法做的太多了。
当你按下一个块时,你应该通知你的 Controller 。这应该决定这是否是一个组的一部分,如果是这样就让该组着火? (我不熟悉术语)。该组中的块应该被赋予一个新状态,例如 ON_FIRE。模型将通知所有观察者这些块现在处于 ON_FIRE。一旦 View 获得此信息,您将执行 ON_FIRE 动画、折叠或其他任何操作。一旦完成,这应该对应于 timeLine.onFinnish
,您现在调用 Controller 中的下一个方法,例如 completedBurning
.现在这将负责清理和间接触发新事物。
希望这是有道理的。
关于design-patterns - JavaFx 2.0 方 block 游戏动画/代码设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13327461/
我正在用power designer创建一个物理模型,我想将默认值添加到我的Mysql表中。 有可能吗,有人加了默认值 ? 谢谢 最佳答案 有可能,我发现“列属性”并不容易 方法如下: 选择表格(单击
关闭。这个问题是 opinion-based 。它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文来回答。 2年前关闭。 Improve t
我正在编写一个采用 Material Design 布局的应用程序,但找不到任何关于如何将对话框动画显示到屏幕上的指南。 这表明盒子应该只是“砰”的一声存在,但这似乎违背了设计的精神,包括动画和触觉。
我做了一个巨大的掠夺,不小心丢失了我的*.cs(设计文件)..我刚刚得到了*.designer文件。 我能否反过来,仅使用 .designer 文件以某种方式创 build 计文件 (*.cs),还是
如果 Google 的关键字规划器向我显示关键字“Web Design [city-name]”获得约 880 次搜索,而“Website Design [city-name]”获得约 620 次搜索
首先,代码: $(document).ready(function() { $('#member_pattern').hide(); $('.add-member').click(function()
大型软件公司之一问了这个问题。我想出了一个简单的解决方案,我想知道其他人对该解决方案有何看法。 You are supposed to design an API and a backend for
在最新的 Material Design 文档 (https://www.google.com/design/spec/what-is-material/elevation-shadows.html#
背景 我正在对从我们的 RDBMS 数据库到 MongoDB 的转换进行原型(prototype)设计。在进行非规范化时,似乎我有两种选择,一种会导致许多(数百万)个小文档,另一种会导致更少(数十万)
Qt Designer (5.11.2) 在选择 QWebEngineView-Widget 时崩溃。 我正在创建一个对话框,以将其作为 .ui 文件包含在 QGIS 3 中。在表单中,我想使用 QW
我直接从 getmdl.io(组件页面)和所有设备(多台 PC、浏览器、手机等)复制代码,汉堡菜单不在标题中居中。我似乎无法隔离 css 中的菜单图标来重新对齐它。 getmdl.io 上的所有组件代
如何为 SPA 动态初始化 materialize design lite (google) 的组件?当我在 View 中动态初始化组件时,JS 没有初始化。正如我已经尝试过使用 componentH
我正在使用 Angular 4 构建一个 Web 应用程序。对于设计,我使用的是 Material Design lite。但是,我想使用 MDL 实现一个交互式轮播,它给我流畅的外观和感觉,并且与我
它看起来像 Polymer Starter Kit包含比 Material Design Lite 更多的组件,并且现在可用。由于两者都是符合 Material Design 理念的 Google 项
我在设置 mdl-textfield 样式时遇到了一些困难。 具体来说,设置 float 标签的大小和颜色,以及按下输入字段后动画的高度和颜色。 实际上,这是我从组件列表中获取的起点。 https:/
所以,好友列表的现代概念: 假设我们有一个名为 Person 的表。现在,那个 Person 需要有很多伙伴(其中每个伙伴也在 person 类中)。构建关系的最明显方法是通过连接表。即 buddyI
如何在导航中创建子菜单项? Link Link Link Link 我不能用 用它。什么是正确的类? 最佳答案 MDL 似乎还没有原生支持子菜单。 然而
我想知道我应该遵循哪些步骤来解决设计自动售货机等问题并提出许多设计文档(如用例、序列图、类图)。是否有任何我可以阅读的来源/链接,其中讨论了如何逐步进行。 谢谢。 最佳答案 我不确定是否有任何普遍接受
早在 10 月份,Kristopher Johnson 就询问了 Accounting Software Design Patterns 他收到了几个答案,但基本上都是一样的,都指向Martin Fo
我一直在为我们的产品开发一些组件,其中之一是基于流布局面板。 我想做的是为它提供一个自定义设计器,但不会丢失其默认设计器 (System.Windows.Forms.Design.FlowLayout
我是一名优秀的程序员,十分优秀!