Thanks to all the helpful posts on this forum, I've found lots of useful tips on getting Alice in gear. But I'm not sure one procedure I'm using is considered kosher, since it causes a glitch. I'm using Alice 2.0 (2.2 won't launch for me) on Win Vista 32-bit.
I have a walk cycle for the faerie model done, and the navigation controls set so she can get about my so-far small world fairly well. But for faster motion, rather than building new methods with different durations and movement speeds, or dealing with assigning values to parameters, I decided to try just using a keypress to accelerate the game speed by two. It has a Keystone Cops look that's not altogether unpleasant, if a little goofy-looking.
Forward, left, right and back navigation works fine when accelerated, and I can turn left while moving forward & back with key combos (the arrow keys, for now). But for some reason the right turn does not work if I'm also trying to move forward (it's fine with moving back). No turn is made & if I hold the right arrow key I'll soon get a beep that usually signifies a full keybuffer. Alice occasionally throws an exception fit as well.
So is using game speed to move fast just not a good idea, or is there some other issue involved in trying to make a right-hand curve in the fast lane?
EDIT: Here's the traceback on the error:
Code:
Error during simulation.
Alice version: 2.0 04/05/2005
os.name: Windows NT (unknown)
os.version: 6.0
os.arch: x86
java.vm.name: Java HotSpot(TM) Client VM
java.vm.version: 1.3.1_10-b03
user.dir: C:\Users\OWNER\Downloads\3D, models & etc\Alice 2.0\Required
Throwable that caused the error:
java.ang.ArrayIndexOutOfBoundsException: -1 not in range [0,3)
at edu.cmu.cs.stage3.alice.core.Behavior$Fork.getNext(Behavior.java:113)
at edu.cmu.cs.stage3.alice.core.Behavior$RuntimeStack.top(Behavior.java:55)
at edu.cmu.cs.stage3.alice.core.Behavior$RuntimeStack.pop(Behavior.java:48)
at edu.cmu.cs.stage3.alice.core.Behavior.closeFork(Behavior.java:176)
at edu.cmu.cs.stage3.alice.core.response.DoTogether$RuntimeDoTogether.epilogue(DoTogether.java:85)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.childrenEpiloguesIfNecessary(CompositeResponse.java:67)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.epilogue(CompositeResponse.java:73)
at edu.cmu.cs.stage3.alice.core.response.LoopNInOrder$RuntimeLoopNInOrder.epilogue(LoopNInOrder.java:99)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.childrenEpiloguesIfNecessary(CompositeResponse.java:67)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.epilogue(CompositeResponse.java:73)
at edu.cmu.cs.stage3.alice.core.response.CallToUserDefinedResponse$RuntimeCallToUserDefinedResponse.epilogue(CallToUserDefinedResponse.java:94)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.childrenEpiloguesIfNecessary(CompositeResponse.java:67)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.epilogue(CompositeResponse.java:73)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.childrenEpiloguesIfNecessary(CompositeResponse.java:67)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.epilogue(CompositeResponse.java:73)
at edu.cmu.cs.stage3.alice.core.response.DoTogether$RuntimeDoTogether.epilogue(DoTogether.java:81)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.childrenEpiloguesIfNecessary(CompositeResponse.java:67)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.epilogue(CompositeResponse.java:73)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.childrenEpiloguesIfNecessary(CompositeResponse.java:67)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.epilogue(CompositeResponse.java:73)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.childrenEpiloguesIfNecessary(CompositeResponse.java:67)
at edu.cmu.cs.stage3.alice.core.response.CompositeResponse$RuntimeCompositeResponse.epilogue(CompositeResponse.java:73)
at edu.cmu.cs.stage3.alice.core.response.CallToUserDefinedResponse$RuntimeCallToUserDefinedResponse.epilogue(CallToUserDefinedResponse.java:94)
at edu.cmu.cs.stage3.alice.core.behavior.AbstractConditionalBehavior.internalSchedule(AbstractConditionalBehavior.java:112)
at edu.cmu.cs.stage3.alice.core.Behavior.schedule(Behavior.java:225)
at edu.cmu.cs.stage3.alice.core.Sandbox.scheduleBehaviors(Sandbox.java:70)
at edu.cmu.cs.stage3.alice.core.World.scheduleBehaviors(World.java:444)
at edu.cmu.cs.stage3.alice.core.World.schedule(World.java:486)
at edu.cmu.cs.stage3.alice.core.clock.DefaultClock.schedule(DefaultClock.java:94)
at edu.cmu.cs.stage3.alice.authoringtool.AuthoringTool$11.run(AuthoringTool.java:681)
at edu.cmu.cs.stage3.alice.authoringtool.util.DefaultScheduler.simulateOnce(DefaultScheduler.java:115)
at edu.cmu.cs.stage3.alice.authoringtool.util.DefaultScheduler.run(DefaultScheduler.java:76)
at edu.cmu.cs.stage3.scheduler.AbstractScheduler.run(AbstractScheduler.java:45)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.Dialog.show(Unknown Source)
at edu.cmu.cs.stage3.swing.DialogManager.showModalDialog(DialogManager.java:58)
at edu.cmu.cs.stage3.swing.DialogManager.showDialog(DialogManager.java:123)
at edu.cmu.cs.stage3.alice.authoringtool.AuthoringTool.play(AuthoringTool.java:5073)
at edu.cmu.cs.stage3.alice.authoringtool.Actions$15.actionPerformed(Actions.java:167)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Looks like some internal array index is being called with an out-of-range parameter.
EDIT2: Having put all my navigation & camera controls in place, I've been dashing about in the World and the same OutOfBoundsException keeps being tossed out while moving, regardless of direction or turning or game speed. Seems it's a more general problem than having to do only with high-speed turning. I'll try to narrow it down to a particular keypress if possible.