《代号一号》动画发生了什么?我使用了很多它们,截至 12 月,我的应用程序不再工作。当我六月离开时,一切都很好(一年多以来都是如此)。
我的应用程序是一款跳棋(跳棋)游戏,自 2013 年起就在应用程序商店中提供。在观看 CN1 Poker 演示后,我完全重写了我的 GUI,因为我想将此类动画添加到我的应用程序中。现在发生的事情是我突然遇到索引越界异常。我将范围缩小到以下情况:
cont.addComponent(comp);
...
...
cont.getComponent(0); <-- index out of bound exception: 0 out of 0
我已经在 6 月份使用了 newVM=true,我相信这是现在的默认值。我尝试通过添加来解决问题
cont.animateLayoutAndWait(100);
在 addComponent 调用之后。这修复了索引越界异常,但现在应用程序在短时间内正常工作后会随机崩溃。我尝试过,但一直无法找到问题的根源。 CN1 中发生了一些变化,因此我的代码不再有效。 (另请参阅旧论坛,搜索“草稿”,我在那里发布了我的基本设计的完整列表。)
我研究了新的 Solitaire 演示,它具有我需要的大部分动画功能。应用商店版本的 Solitaire 在我所有的 iOS/Android 设备上运行良好。一个小错误是可以拖动一组卡片,其中包括一些面朝下的卡片,而在拖动操作期间这些卡片面朝上。此外,要挑选正确数量的卡片也非常困难。拖动一组卡片还会在屏幕上留下白色痕迹,看起来不太好。这也发生在模拟器中。
作为实验,我重新设计了 GUI 布局,使其与 Solitaire 代码的布局完全相似:两层按钮,唯一的区别是我使用 GridLayout(10,10),而 Solitaire 使用 SolitaireLayout()。这是有效的,除了一件事:如果一个棋子在棋盘上向下移动,它会正确地移动到其他棋子的上方,但如果一个棋子在棋盘上移动,它会在其他棋子的下方移动。
我的代码如下所示:
Button pc = (Button)piecesCnt.getComponentAt(a1);
Button to = (Button)piecesCnt.getComponentAt(a2);
piecesCnt.removeComponent(pc);
piecesCnt.addComponent(a1, createPieceButton(Piece.EMPTY_PIECE, true));
piecesCnt.removeComponent(to);
piecesCnt.addComponent(a2, pc);
piecesCnt.animateLayoutAndWait(1000);
所以看起来按钮总是按照 GridLayout 顺序绘制,而我希望动画(移动)按钮将绘制在最后/顶部,就像纸牌中的移动卡片一样。
这是 SolitaireLayout 与 GridLayout 中处理动画的区别吗?如果是这样,可以在动画逻辑中改变它吗?否则我必须添加额外的动画层和大量的开销。
在 Android 上,动画(运动)无法正常工作。因此,我决定在我的设备上使用当前 CN1 版本(插件 3.2.6,libs 2016-01-11)自行构建和测试 Solitaire 演示。我将动画速度减慢了 10 倍,以便更好地了解正在发生的情况。在模拟器中,布局和动画大部分工作正常,但在我的 iOS 和 Android 设备上却存在很多问题。
模拟器(Windows 7、NetBeans 8.0.2):
- 我用文本替换了字体图标,因为它们丢失了。
- 但是如何访问汉堡菜单?我没有看到这三个点,甚至没有空间。
- 有时可以拖动一组牌,并拿走一些面朝下的牌;拖动时,它们会暂时翻转面朝上。
- 自动播放似乎并不总是有效。 (并非所有动作都会进行。)
在 iOS 9.2 (iPad 4)、iOS 8.4 (iPhone 4) 上:
- [?] 显示在汉堡菜单复选框中。
- 启动后,画面背景卡背跳转到容器/屏幕的底部。
- 有时,在从牌组发牌的动画中,最右侧画面中的牌会暂时面朝上,而已经面朝上的牌会翻转为面朝下。然而,最终的交易状态是正确的。
- 撤消/重做:有时会导致牌面朝上放在牌组 0 上,而牌面朝下放在牌组 1 上。
- 重做有时会“跳”到新布局而不是动画。
仅限 iPhone:
- 一系列自动游戏动作留下了不一致的基础状态:顶牌红心-J、梅花-10、梅花-K、钻石-Q;即,2 张俱乐部卡位于不同的基础牌堆上。
在 Android 5.1.1 (Nexus 7) 上存在更多问题。
- 从牌组开始交易的动画看起来并不漂亮。卡片被插入(滑至)工作画面堆栈的底部,因此它们会滑到其他卡片下方。移动的牌应面朝下,但通常面朝上,始终显示发给画面 1 的第一张牌。最右边画面中的牌暂时面朝上。最后,将已经面朝上的卡片翻转面朝下并再次翻转过来。然而,最终的交易状态是正确的。
- 当连续进行多个动作时,自动播放也不正确。在动画过程中,几张正面朝上的基础牌会暂时改变其牌值(正面)。此外,移动卡会滑到基础卡下方(有时会滑到基础卡上方,但这是例外)。
- 完成游戏后,做得很好的屏幕被损坏,因为文本似乎没有显示在卡片上,而是显示在卡片下方(在一个大的空白区域中),而卡片在屏幕顶部的一小部分中仅部分可见。
- 开始新游戏经常失败,因为未开始从牌组发牌;屏幕上显示了一副牌和四张国王放在地基上,而画面是空的。当点击牌组时,会发一张牌并显示完成的顺序。有时重复此操作会成功开始新游戏。
所有这一切已经花费了很多时间,但我的应用程序仍然没有再次运行,这非常令人沮丧。在这个主题上遇到很多麻烦,即使下载了演示应用程序,使用 Codename One 构建此类应用程序感觉就像在流沙上构建一样。请帮忙!