예제 #1
0
		private void HandleMoveCircle(CCTouch touch)
		{
			const float timeToTake = 1.5f; // in seconds
			CCFiniteTimeAction coreAction = null;

			CCNode nodeToAddTo = drawNodeRoot;

			switch (VariableOptions [currentVariableIndex])
			{
			case "Position":
				coreAction = new CCMoveTo(timeToTake, touch.Location);

					break;
			case "Scale":
					var distance = CCPoint.Distance (touch.Location, drawNodeRoot.Position);
					var desiredScale = distance / DefaultCircleRadius;
					coreAction = new CCScaleTo(timeToTake, desiredScale);

					break;
			case "Rotation":
					float differenceY = touch.Location.Y - drawNodeRoot.PositionY;
					float differenceX = touch.Location.X - drawNodeRoot.PositionX;

					float angleInDegrees = -1 * CCMathHelper.ToDegrees(
						(float)System.Math.Atan2(differenceY, differenceX));

					coreAction = new CCRotateTo (timeToTake, angleInDegrees);

					break;
				case "LineWidth":
					coreAction = new LineWidthAction (timeToTake, touch.Location.X / 40.0f);
					nodeToAddTo = lineNode;
					break;
			}

			CCAction easing = null;
			switch (EasingOptions [currentEasingIndex])
			{
				case "<None>":
					// no easing, do nothing, it will be handled below
					break;
				case "CCEaseBack":
					if (currentInOutIndex == 0)
						easing = new CCEaseBackOut (coreAction);
					else if (currentInOutIndex == 1)
						easing = new CCEaseBackIn (coreAction);
					else
						easing = new CCEaseBackInOut (coreAction);

					break;
				case "CCEaseBounce":
					if (currentInOutIndex == 0)
						easing = new CCEaseBounceOut (coreAction);
					else if (currentInOutIndex == 1)
						easing = new CCEaseBounceIn (coreAction);
					else
						easing = new CCEaseBounceInOut (coreAction);

					break;
				case "CCEaseElastic":
					if (currentInOutIndex == 0)
						easing = new CCEaseElasticOut (coreAction);
					else if (currentInOutIndex == 1)
						easing = new CCEaseElasticIn (coreAction);
					else
						easing = new CCEaseElasticInOut (coreAction);

					break;
				case "CCEaseExponential":
					if (currentInOutIndex == 0)
						easing = new CCEaseExponentialOut (coreAction);
					else if (currentInOutIndex == 1)
						easing = new CCEaseExponentialIn (coreAction);
					else
						easing = new CCEaseExponentialInOut (coreAction);

					break;
				case "CCEaseSine":

					if (currentInOutIndex == 0)
						easing = new CCEaseSineOut (coreAction);
					else if (currentInOutIndex == 1)
						easing = new CCEaseSineIn (coreAction);
					else
						easing = new CCEaseSineInOut (coreAction);

					break;
			}

			if (easing != null)
			{
				nodeToAddTo.AddAction (easing);
			}
			else
			{
				nodeToAddTo.AddAction (coreAction);
			}

		}
예제 #2
0
		void HandleMoveCircle (CCTouch touch)
		{
			const float timeToTake = 1.5f; // in seconds
			CCFiniteTimeAction coreAction = null;

			// By default all actions will be added directly to the
			// root node - it has values for Position, Scale, and Rotation.
			CCNode nodeToAddTo = drawNodeRoot;

			switch (VariableOptions [currentVariableIndex]) {
			case "Position":
				coreAction = new CCMoveTo(timeToTake, touch.Location);
				break;
			case "Scale":
				var distance = CCPoint.Distance (touch.Location, drawNodeRoot.Position);
				var desiredScale = distance / DefaultCircleRadius;
				coreAction = new CCScaleTo (timeToTake, desiredScale);
				break;
			case "Rotation":
				float differenceY = touch.Location.Y - drawNodeRoot.PositionY;
				float differenceX = touch.Location.X - drawNodeRoot.PositionX;

				float angleInDegrees = -1 * CCMathHelper.ToDegrees (
					(float)Math.Atan2 (differenceY, differenceX));

				coreAction = new CCRotateTo (timeToTake, angleInDegrees);

				break;
			case "LineWidth":
				coreAction = new LineWidthAction (timeToTake, touch.Location.X / 40f);
				// The LineWidthAction is a special action designed to work only on
				// LineNode instances, so we have to set the nodeToAddTo to the lineNode:
				nodeToAddTo = lineNode;
				break;
			}

			CCAction easing = null;
			switch (EasingOptions [currentEasingIndex]) {
			case "CCEaseBack":
				if (currentInOutIndex == 0)
					easing = new CCEaseBackOut (coreAction);
				else if (currentInOutIndex == 1)
					easing = new CCEaseBackIn (coreAction);
				else
					easing = new CCEaseBackInOut (coreAction);

				break;
			case "CCEaseBounce":
				if (currentInOutIndex == 0)
					easing = new CCEaseBounceOut (coreAction);
				else if (currentInOutIndex == 1)
					easing = new CCEaseBounceIn (coreAction);
				else
					easing = new CCEaseBounceInOut (coreAction);

				break;
			case "CCEaseElastic":
				if (currentInOutIndex == 0)
					easing = new CCEaseElasticOut (coreAction);
				else if (currentInOutIndex == 1)
					easing = new CCEaseElasticIn (coreAction);
				else
					easing = new CCEaseElasticInOut (coreAction);

				break;
			case "CCEaseExponential":
				if (currentInOutIndex == 0)
					easing = new CCEaseExponentialOut (coreAction);
				else if (currentInOutIndex == 1)
					easing = new CCEaseExponentialIn (coreAction);
				else
					easing = new CCEaseExponentialInOut (coreAction);

				break;
			case "CCEaseSine":
				if (currentInOutIndex == 0)
					easing = new CCEaseSineOut (coreAction);
				else if (currentInOutIndex == 1)
					easing = new CCEaseSineIn (coreAction);
				else
					easing = new CCEaseSineInOut (coreAction);

				break;
			}

			nodeToAddTo.AddAction (easing ?? coreAction);
		}
예제 #3
0
        public override void OnEnter()
        {
            base.OnEnter();

            var s = Layer.VisibleBoundsWorldspace.Size;

            var move = new CCMoveBy (3, new CCPoint(s.Width - 130, 0));
            var move_back = move.Reverse();

            var move_ease_in = new CCEaseBounceIn(move);
            var move_ease_in_back = move_ease_in.Reverse();

            var move_ease_out = new CCEaseBounceOut(move);
            var move_ease_out_back = move_ease_out.Reverse();

            var delay = new CCDelayTime (0.25f);

            var seq1 = new CCSequence(move, delay, move_back, delay);
            var seq2 = new CCSequence(move_ease_in, delay, move_ease_in_back, delay);
            var seq3 = new CCSequence(move_ease_out, delay, move_ease_out_back,
                                                delay);

            m_grossini.RunAction(new CCRepeatForever (seq1));
            m_tamara.RunAction(new CCRepeatForever (seq2));
            m_kathia.RunAction(new CCRepeatForever (seq3));
        }