コード例 #1
0
        public void MoveTowards(CGPoint position, double timeInterval)
        {
            CGPoint curPosition = Position;
            var     dx          = position.X - curPosition.X;
            var     dy          = position.Y - curPosition.Y;
            var     ds          = MovementSpeed * (float)timeInterval;

            var angle = GraphicsUtilities.RadiansBetweenCGPoints(position, curPosition);

            angle     = GraphicsUtilities.PalarAdjust(angle);
            ZRotation = angle;

            var distRemaining = GraphicsUtilities.Hypotenuse(dx, dy);

            if (distRemaining < ds)
            {
                Position = position;
            }
            else
            {
                var x = (float)(curPosition.X - Math.Sin(angle) * ds);
                var y = (float)(curPosition.Y + Math.Cos(angle) * ds);
                Position = new CGPoint(x, y);
            }

            RequestedAnimation = AnimationState.Walk;
        }
コード例 #2
0
        public void MoveInDirection(CGPoint direction, double timeInterval)
        {
            var curPosition = Position;
            var dx          = MovementSpeed * direction.X;
            var dy          = MovementSpeed * direction.Y;
            var ds          = MovementSpeed * (float)timeInterval;

            var targetPosition = new CGPoint(curPosition.X + dx, curPosition.Y + dy);

            var angle = GraphicsUtilities.RadiansBetweenCGPoints(targetPosition, curPosition);
            var ang   = GraphicsUtilities.PalarAdjust(angle);

            ZRotation = ang;

            var distRemaining = GraphicsUtilities.Hypotenuse(dx, dy);

            if (distRemaining < ds)
            {
                Position = targetPosition;
            }
            else
            {
                float x = (float)(curPosition.X - Math.Sin(ang) * ds);
                float y = (float)(curPosition.Y + Math.Cos(ang) * ds);
                Position = new CGPoint(x, y);
            }

            // Don't change to a walk animation if we planning an attack.
            if (!Attacking)
            {
                RequestedAnimation = AnimationState.Walk;
            }
        }
コード例 #3
0
        public void FaceTo(CGPoint position)
        {
            var      angle  = GraphicsUtilities.RadiansBetweenCGPoints(position, Position);
            var      ang    = GraphicsUtilities.PalarAdjust(angle);
            SKAction action = SKAction.RotateToAngle(ang, 0);

            RunAction(action);
        }