我想设计一个简单的游戏,其中球击中盒子,用户必须尝试用光标将球向上移动。当球返回时,球运动结束,是屏幕底部的偏移量,如果球偏移量等于光标,我想重置动画,然后给它一个新的方向,但这永远不会发生。
请查看我打印的值。
532.0
是cursor.position.dy
,其他人是positionBall.dy + renderBall.size.height
。
为什么只有当球向上移动时(我点击屏幕的那一刻),球的偏移量和光标的偏移量才相等,而不是相反?
---更新---
当我增加持续时间(例如,10秒),或者从颤振检查器中激活慢速动画按钮时,数字变得更接近,并且通过将它们调整为int,条件是制成。
I/flutter (21563): 532.0
I/flutter (21563): 532.45585
我真的很困惑,我不知道后台发生了什么。
void initState() {
super.initState();
Offset init = initialBallPosition();
final g = Provider.of<GameStatus>(context, listen: false);
var key = ball.key;
_animationController = AnimationController(duration: Duration(seconds: 1), vsync: this);
_tweenOffset = Tween<Offset>(begin: init, end: init);
_animationOffset = _tweenOffset.animate(
CurvedAnimation(parent: _animationController, curve: Curves.linear),
)..addListener(() {
if (_animationController.isAnimating) {
//if (_animationController.status == AnimationStatus.forward) {
RenderBox renderBall = key.currentContext.findRenderObject();
final positionBall = renderBall.localToGlobal(Offset.zero);
print(cursor.position.dy);
print(positionBall.dy + renderBall.size.height);
if (positionBall.dy + renderBall.size.height == cursor.position.dy && g.ballDirection == 270) {
print('bang');
colideWithCursor();
}
}
if (_animationController.status == AnimationStatus.completed) {
if (bottomOfBall().dy == Screen.screenHeight / ball.width) {
gameOver();
} else
collision();
}
});
_animationController.isDismissed;
}
@override
Widget build(BuildContext context) {
final game = Provider.of<GameStatus>(context, listen: false);
return Selector<GameStatus, bool>(
selector: (ctx, game) => game.firstShoot,
builder: (context, startGame, child) {
if (startGame) {
game.ballDirection = 90;
routing(game.ballDirection);
}
return UnconstrainedBox(child: (SlideTransition(position: _animationOffset, child: ball.createBall())));
});
}