【发布时间】:2016-01-12 12:35:17
【问题描述】:
代号一号动画发生了什么?我使用了很多,截至 12 月,我的应用程序不再工作。当我在 6 月份离开时,一切都很好(一年多以来一直如此)。
我的应用程序是一个草稿(跳棋)游戏,自 2013 年起在应用程序商店中提供。在看到 CN1 Poker 演示后,我完全重写了我的 GUI,因为我想将这些动画添加到我的应用程序中。现在发生的事情是我突然让 index out of bound 异常。我将其缩小到以下情况:
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): - 我用文本替换了字体图标,因为它们丢失了。 - 但是如何访问汉堡菜单?我没有看到 3 个点,甚至没有空间。 - 有时可以拖动一组卡片,其中包含一些向下的卡片;拖动时,它们会暂时朝上翻转。 - 自动播放似乎并不总是有效。 (并非所有的动作都被播放。)
在 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 构建这种类型的应用程序感觉就像在流沙上构建。请帮忙!
【问题讨论】:
标签: java android ios animation codenameone