Пример #1
0
        public override void update(float t)
        {
            float newT = 0;

            if (FloatUtils.EQ(t, 0) || FloatUtils.EQ(t, 1))
            {
                newT = t;
            }

            else
            {
                float s = _period / 4;
                t    = t - 1;
                newT = -Mathf.Pow(2, 10 * t) * Mathf.Sin((t - s) * (Mathf.PI * 2) / _period);
            }
            _inner.update(newT);
        }
Пример #2
0
        public override void update(float t)
        {
            // prevents rouding errors
            if (!FloatUtils.EQ(t, 1) && !FloatUtils.EQ(t, 0))
            {
                t *= 2;
                if (FloatUtils.Small(t, 1))
                {
                    t = 0.5f * Mathf.Pow(2, 10 * (t - 1));
                }
                else
                {
                    t = 0.5f * (-Mathf.Pow(2, -10 * (t - 1)) + 2);
                }
            }

            _inner.update(t);
        }
Пример #3
0
        // Needed for BridgeSupport
        public override void update(float t)
        {
            if (FloatUtils.Small(t, 0.5f))
            {
                t = Mathf.Pow(t * _intersetValue, _polynomialOrder);
            }
            else
            {
                if (_hasInflection)
                {
                    t = Mathf.Pow((t - 1.0f) * _intersetValue, _polynomialOrder) + 1.0f;
                }
                else
                {
                    t = -Mathf.Pow((t - 1.0f) * _intersetValue, _polynomialOrder) + 1.0f;
                }
            }

            _inner.update(t);
        }
        public static CGAffineTransform Invert(CGAffineTransform xform)
        {
            CGAffineTransform result;
            float             determinant;

            determinant = xform.a * xform.d - xform.c * xform.b;
            if (FloatUtils.EQ(determinant, 0))
            {
                return(xform);
            }

            result.a  = xform.d / determinant;
            result.b  = -xform.b / determinant;
            result.c  = -xform.c / determinant;
            result.d  = xform.a / determinant;
            result.tx = (-xform.d * xform.tx + xform.c * xform.ty) / determinant;
            result.ty = (xform.b * xform.tx - xform.a * xform.ty) / determinant;

            return(result);
        }
        protected float bounceTime(float t)
        {
            if (FloatUtils.Small(t, 1 / 2.75f))
            {
                return(7.5625f * t * t);
            }
            else if (FloatUtils.Small(t, 2 / 2.75f))
            {
                t -= 1.5f / 2.75f;
                return(7.5625f * t * t + 0.75f);
            }
            else if (FloatUtils.Small(t, 2.5f / 2.75f))
            {
                t -= 2.25f / 2.75f;
                return(7.5625f * t * t + 0.9375f);
            }

            t -= 2.625f / 2.75f;
            return(7.5625f * t * t + 0.984375f);
        }
        public override void update(float t)
        {
            float newT;

            // prevents possible rounding errors
            if (FloatUtils.EQ(t, 0) || FloatUtils.EQ(t, 1))
            {
                newT = t;
            }
            else if (FloatUtils.Small(t, 0.5f))
            {
                t    = t * 2;
                newT = (1 - bounceTime(1 - t)) * 0.5f;
            }
            else
            {
                newT = bounceTime(t * 2 - 1) * 0.5f + 0.5f;
            }

            _inner.update(newT);
        }
Пример #7
0
        // issue #80. Instead of hooking step:, hook update: since it can be called by any
        // container action like CCRepeat, CCSequence, CCEase, etc..
        public override void update(float dt)
        {
            if (FloatUtils.EB(dt, _nextDt))
            {
                while (FloatUtils.Big(dt, _nextDt) && _total < _times)
                {
                    _innerAction.update(1.0f);
                    _total++;

                    _innerAction.stop();
                    _innerAction.startWithTarget(_target);
                    _nextDt += _innerAction.duration / _duration;
                }

                // fix for issue #1288, incorrect end value of repeat
                if (FloatUtils.EB(dt, 1.0f) && _total < _times)
                {
                    _total++;
                }

                // don't set a instantaction back or update it, it has no use because it has no duration
                if (!_isActionInstant)
                {
                    if (_total == _times)
                    {
                        _innerAction.update(1);
                        _innerAction.stop();
                    }
                    else
                    {
                        // issue #390 prevent jerk, use right update
                        _innerAction.update(dt - (_nextDt - _innerAction.duration / _duration));
                    }
                }
            }
            else
            {
                _innerAction.update((dt * _times) % 1.0f);
            }
        }
Пример #8
0
        public void initWithAction(CCActionFiniteTime one, CCActionFiniteTime two)
        {
            NSUtils.Assert(one != null && two != null, "Sequence: arguments must be non-nil");
            NSUtils.Assert(one != _one && one != _two, "Spawn: reinit using same parameters is not supported");
            NSUtils.Assert(two != _two && two != _one, "Spawn: reinit using same parameters is not supported");

            float d1 = one.duration;
            float d2 = two.duration;

            base.initWithDuration(Mathf.Max(d1, d2));
            _one = one;
            _two = two;

            if (FloatUtils.Big(d1, d2))
            {
                _two = CCSequence.Actions(two, new CCDelayTime(d1 - d2));
            }
            else if (d1 < d2)
            {
                _one = CCSequence.Actions(one, new CCDelayTime(d2 - d1));
            }
        }
Пример #9
0
        //-------------update------------

        /** 'update' the scheduler.
         * You should NEVER call this method, unless you know what you are doing.
         */
        public void update(float dt)
        {
            if (_paused)
            {
                return;
            }
            updateHashLocked = true;
            if (!FloatUtils.EQ(_timeScale, 1.0f))
            {
                dt *= _timeScale;
            }

            // Iterate all over the Updates selectors
            // updates with priority < 0
            {
                for (utNode <tListEntry> tmp = updatesNeg.head; tmp != null; tmp = tmp.next)
                {
                    utNode <tListEntry> entry = tmp;
                    if (!entry.obj.paused && !entry.obj.markedForDeletion)
                    {
                        entry.obj.impMethod.Invoke(dt);
                    }
                }
            }
            // updates with priority == 0
            {
                for (utNode <tListEntry> tmp = updates0.head; tmp != null; tmp = tmp.next)
                {
                    utNode <tListEntry> entry = tmp;
                    if (!entry.obj.paused && !entry.obj.markedForDeletion)
                    {
                        entry.obj.impMethod.Invoke(dt);
                    }
                }
            }
            // updates with priority > 0
            {
                for (utNode <tListEntry> tmp = updatesPos.head; tmp != null; tmp = tmp.next)
                {
                    utNode <tListEntry> entry = tmp;
                    if (!entry.obj.paused && !entry.obj.markedForDeletion)
                    {
                        entry.obj.impMethod.Invoke(dt);
                    }
                }
            }

//			 Iterate all over the custom selectors (CCTimers)
            if (hashForTimers.Any())
            {
                var enumerator = new Dictionary <int, tHashTimerEntry>(hashForTimers).GetEnumerator();
                while (enumerator.MoveNext())
                {
                    var elt = enumerator.Current.Value;
                    currentTarget         = elt;
                    currentTargetSalvaged = false;
                    if (!currentTarget.paused)
                    {
                        for (elt.timerIndex = 0; elt.timerIndex < elt.timers.Count; elt.timerIndex++)
                        {
                            elt.currentTimer         = elt.timers[elt.timerIndex];
                            elt.currentTimerSalvaged = false;
                            elt.currentTimer.update(dt);
                            elt.currentTimer = null;
                        }
                    }
                    if (currentTargetSalvaged && currentTarget.timers.Count == 0)
                    {
                        removeHashElement(currentTarget);
                    }
                }
            }


            for (utNode <tListEntry> tmp = updatesNeg.head; tmp != null; tmp = tmp.next)
            {
                utNode <tListEntry> entry = tmp;
                if (entry.obj.markedForDeletion)
                {
                    removeUpdatesFromHash(entry);
                }
            }

            for (utNode <tListEntry> tmp = updates0.head; tmp != null; tmp = tmp.next)
            {
                utNode <tListEntry> entry = tmp;
                if (entry.obj.markedForDeletion)
                {
                    removeUpdatesFromHash(entry);
                }
            }


            for (utNode <tListEntry> tmp = updatesPos.head; tmp != null; tmp = tmp.next)
            {
                utNode <tListEntry> entry = tmp;
                if (entry.obj.markedForDeletion)
                {
                    removeUpdatesFromHash(entry);
                }
            }
            updateHashLocked = false;
            currentTarget    = null;
        }
Пример #10
0
 public override void update(float t)
 {
     _inner.update(FloatUtils.EQ(t, 0) ? 0 : Mathf.Pow(2, 10 * (t / 1 - 1)) /* - 1 * 0.001f */);
 }
Пример #11
0
		public void OnUpdate(CADisplayLink sender) {
			bool hasTouchesBegan = false;
			bool hasTouchesMoved = false;
			bool hasTouchesEnded = false;
			bool hasTouchesCancelled = false;
			int touchCount = Input.touchCount;
			if (touchCount > 0) {
				int count = Input.touches.Length;
				for (int i=0; i<count; i++) {
					Touch touch = Input.touches [i];
					UITouch uiTouch = new UITouch ();
					uiTouch.fingerId = touch.fingerId;
					uiTouch.phase = touch.phase;
					uiTouch.location = Camera.main.ScreenToWorldPoint (touch.position) * PIXEL_PER_UNIT;
					uiTouch.tapCount = touch.tapCount;
					uiTouch.timestamp = DateTime.Now;
					if (touch.phase == TouchPhase.Began) {
						touchesBegan.Add (uiTouch);
						hasTouchesBegan = true;
					} else if (touch.phase == TouchPhase.Moved) {
						touchesMoved.Add (uiTouch);
						hasTouchesMoved = true;
					} else if (touch.phase == TouchPhase.Ended) {
						touchesEnded.Add (uiTouch);
						hasTouchesEnded = true;
					} else if (touch.phase == TouchPhase.Canceled) {
						touchesCancelled.Add (uiTouch);
						hasTouchesCancelled = true;
					}
				} 
			} else {
				#if UNITY_EDITOR
				#if UNITY_IOS || UNITY_ANDROID || UNITY_WP8 || UNITY_WP8_1
				if(Input.GetMouseButtonDown(0)){
					UITouch uiTouch = new UITouch();
					uiTouch.fingerId = UITouch.SINGLE_TOUCH_ID;
					uiTouch.phase = TouchPhase.Began;
					uiTouch.location = Camera.main.ScreenToWorldPoint(Input.mousePosition) * PIXEL_PER_UNIT;
					uiTouch.tapCount = 1;
					uiTouch.timestamp = DateTime.Now;
					
					touchesBegan.Add (uiTouch);
					hasTouchesBegan = true;
				}else if(Input.GetMouseButtonUp(0)){
					UITouch uiTouch = new UITouch();
					uiTouch.fingerId = UITouch.SINGLE_TOUCH_ID;
					uiTouch.phase = TouchPhase.Ended;
					uiTouch.location = Camera.main.ScreenToWorldPoint(Input.mousePosition) * PIXEL_PER_UNIT;
					uiTouch.tapCount = 1;
					uiTouch.timestamp = DateTime.Now;
					
					touchesEnded.Add (uiTouch);
					hasTouchesEnded = true;
				}else if(Input.GetMouseButton(0)){
					UITouch uiTouch = new UITouch();
					uiTouch.fingerId = UITouch.SINGLE_TOUCH_ID;
					uiTouch.phase = TouchPhase.Moved;
					uiTouch.location = Camera.main.ScreenToWorldPoint(Input.mousePosition) * PIXEL_PER_UNIT;
					uiTouch.tapCount = 1;
					uiTouch.timestamp = DateTime.Now;
					
					touchesMoved.Add (uiTouch);
					hasTouchesMoved = true;
				}
				#endif
				#endif
			}
			if (hasTouchesBegan)
				_rootViewController.view.touchesBegan (touchesBegan);
			if (hasTouchesMoved)
				_rootViewController.view.touchesMoved (touchesMoved);
			if (hasTouchesEnded)
				_rootViewController.view.touchesEnded (touchesEnded);
			if (hasTouchesCancelled)
				_rootViewController.view.touchesCancelled (touchesCancelled);
			touchesBegan.Clear ();
			touchesMoved.Clear ();
			touchesEnded.Clear ();
			touchesCancelled.Clear ();
			
			#if UNITY_STANDALONE || UNITY_WEBGL
			if (Input.GetMouseButtonDown (0)) {
				NSEvent nsevent = getMouseEvent ();
				_rootViewController.view.mouseDown (nsevent);
			} else if (Input.GetMouseButtonUp (0)) {
				NSEvent nsevent = getMouseEvent ();
				_rootViewController.view.mouseUp (nsevent);
			} else if (Input.GetMouseButton (0)) {
				NSEvent nsevent = getMouseEvent ();
				_rootViewController.view.mouseDragged (nsevent);
			} else if (Input.GetMouseButtonDown (1)) {
				NSEvent nsevent = getMouseEvent ();
				_rootViewController.view.rightMouseDown (nsevent);
			} else if (Input.GetMouseButtonUp (1)) {
				NSEvent nsevent = getMouseEvent ();
				_rootViewController.view.rightMouseUp (nsevent);
			} else if (Input.GetMouseButton (1)) {
				NSEvent nsevent = getMouseEvent ();
				_rootViewController.view.rightMouseDragged (nsevent);
			} else if (Input.GetMouseButtonDown (2)) {
				NSEvent nsevent = getMouseEvent ();
				_rootViewController.view.otherMouseDown (nsevent);
			} else if (Input.GetMouseButtonUp (2)) {
				NSEvent nsevent = getMouseEvent ();
				_rootViewController.view.otherMouseUp (nsevent);
			} else if (Input.GetMouseButton (2)) {
				NSEvent nsevent = getMouseEvent ();
				_rootViewController.view.otherMouseDragged (nsevent);
			}else{
				float d = Input.GetAxis("Mouse ScrollWheel");
				if(!FloatUtils.EQ(d, 0)){
					NSEvent wheelEvt = getMouseEvent();
					wheelEvt.mouseWheelDelta = d;
					_rootViewController.view.scrollWheel(wheelEvt);
				}
				float dx = Input.GetAxis("Mouse X");
				float dy = Input.GetAxis("Mouse Y");
				if(!FloatUtils.EQ(dx, 0) || !FloatUtils.EQ(dy, 0)){
					NSEvent nsevent = getMouseEvent ();
					nsevent.mouseDelta = new Vector2(dx, dy) * PIXEL_PER_UNIT;
					_rootViewController.view.mouseMoved(nsevent);
				}
			}
			//Keybaord Events
			keyboardEvent();

			#endif
		}
Пример #12
0
 public override void update(float t)
 {
     _inner.update(FloatUtils.EQ(t, 1) ? 1 : (-Mathf.Pow(2, -10 * t / 1) + 1));
 }
Пример #13
0
        public static CCTMXMap Parse(string file, NSDictionary tilesetCaches = null)
        {
            string      text   = LoadText(file);
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(text);
            XmlNodeList nodeList = xmlDoc.DocumentElement.ChildNodes;

            // get mapWidth, mapHeight, tileWidth, tileHeight
            XmlNode mapNode = xmlDoc.DocumentElement;

            float version = float.Parse(mapNode.Attributes["version"].InnerText);

            if (!FloatUtils.EQ(version, 1.0f))
            {
                CCDebug.Warning("cocos2d:CCTMXMap: Found {0} tmx file, but only 1.0 version was tested.", version);
            }

            string dir = file.Replace(Path.GetFileName(file), "");

            CCTMXMap map = new CCTMXMap();

            map.fileName   = file;
            map.cols       = int.Parse(mapNode.Attributes["width"].InnerText);
            map.rows       = int.Parse(mapNode.Attributes["height"].InnerText);
            map.tileWidth  = int.Parse(mapNode.Attributes["tilewidth"].InnerText);
            map.tileHeight = int.Parse(mapNode.Attributes["tileheight"].InnerText);

            Dictionary <int, string> gidToFiles = new Dictionary <int, string> (256);
            Dictionary <int, Dictionary <string, string> > gidToTileProperties = new Dictionary <int, Dictionary <string, string> > (256);
            List <CCTMXLayer> layers = new List <CCTMXLayer> (8);


            var enumerator = nodeList.GetEnumerator();

            while (enumerator.MoveNext())
            {
                XmlNode nodeData = (XmlNode)enumerator.Current;
                if (nodeData.Name == "tileset")
                {
                    ParseTileset(nodeData, gidToFiles, gidToTileProperties, dir, tilesetCaches);
                }
                else if (nodeData.Name == "layer")
                {
                    CCTMXLayer layer = ParseLayer(nodeData, map.cols, map.rows, gidToFiles, gidToTileProperties);
                    layers.Add(layer);
                }
                else if (nodeData.Name == "objectgroup")
                {
                    CCTMXLayer layer = ParseObjectGroup(nodeData, map.cols, map.rows, map.tileWidth, map.tileHeight, gidToFiles, gidToTileProperties);
                    layers.Add(layer);
                }
                else if (nodeData.Name == "properties")
                {
                    if (map.properties == null)
                    {
                        map.properties = new Dictionary <string, string>();
                    }
                    ParseProperties(nodeData, map.properties);
                }
            }
            map.gidToFiles          = gidToFiles;
            map.gidToTileProperties = gidToTileProperties;
            map.layers = layers.ToArray();
            return(map);
        }
Пример #14
0
 protected override CCAction reverseImpl()
 {
     return(new CCShake(this.duration, amplitude, dampening, FloatUtils.EQ(shakeInterval, 0) ? 0 : Mathf.RoundToInt(1 / shakeInterval)));
 }
Пример #15
0
        public override void update(float t)
        {
            int   found = 0;
            float new_t = 0;

            CCAction action0 = _actions [0];
            CCAction action1 = _actions [1];

            if (FloatUtils.Small(t, _split))
            {
                // action[0]
                found = 0;
                if (!FloatUtils.EQ(_split, 0))
                {
                    new_t = t / _split;
                }
                else
                {
                    new_t = 1;
                }
            }
            else
            {
                // action[1]
                found = 1;
                if (FloatUtils.EQ(_split, 1))
                {
                    new_t = 1;
                }
                else
                {
                    new_t = (t - _split) / (1 - _split);
                }
            }

            if (found == 1)
            {
                if (_last == -1)
                {
                    // action[0] was skipped, execute it.
                    action0.startWithTarget(_target);
                    action0.update(1.0f);
                    action0.stop();
                }
                else if (_last == 0)
                {
                    // switching to action 1. stop action 0.
                    action0.update(1.0f);
                    action0.stop();
                }
            }
            else if (found == 0 && _last == 1)
            {
                // Reverse mode ?
                // XXX: Bug. this case doesn't contemplate when _last==-1, found=0 and in "reverse mode"
                // since it will require a hack to know if an action is on reverse mode or not.
                // "step" should be overriden, and the "reverseMode" value propagated to inner Sequences.
                action1.update(0);
                action1.stop();
            }

            // Last action found and it is done.
            if (found == _last && _actions[found].isDone())
            {
                return;
            }

            // New action. Start it.
            if (found != _last)
            {
                _actions[found].startWithTarget(_target);
            }

            _actions[found].update(new_t);
            _last = found;
        }
Пример #16
0
 /** returns YES if the action has finished */
 public override bool isDone()
 {
     return(FloatUtils.EB(_elapsed, _duration));
 }
        public override void ccTouchMoved(UITouch touch)
        {
            if (scrollTouch_ != touch)
            {
                return;
            }

            Vector2 touchPoint = this.convertTouchToNodeSpace(touch);

            touchPoint = this.convertToWorldSpace(touchPoint);


            // If finger is dragged for more distance then minimum - start sliding and cancel pressed buttons.
            // Of course only if we not already in sliding mode
            if ((state_ != kCCScrollLayerState.Sliding) &&
                (Mathf.Abs(touchPoint.x - startSwipe_) >= this.minimumTouchLengthToSlide))
            {
                state_ = kCCScrollLayerState.Sliding;

                // Avoid jerk after state change.
                startSwipe_ = touchPoint.x;

                if (this.stealTouches)
                {
                    this.claimTouch(touch);
                }
                if (this.delegate_ != null)
                {
                    this.delegate_.scrollLayerDraging(this);
                }
            }

            if (state_ == kCCScrollLayerState.Sliding)
            {
                float desiredX = (-currentScreen_ * (this.contentSize.x - this.pagesWidthOffset)) + touchPoint.x - startSwipe_;
                int   page     = this.pageNumberForPosition(new Vector2(desiredX, 0));
                float offset   = desiredX - this.positionForPageWithNumber(page).x;
                if ((page == 0 && FloatUtils.Big(offset, 0)) || (page == layers_.Count - 1 && FloatUtils.Small(offset, 0)))
                {
                    offset -= marginOffset_ * offset / CCDirector.sharedDirector.winSize.x;
                }
                else
                {
                    offset = 0;
                }
                this.position = new Vector2(desiredX - offset, 0);
            }
        }
Пример #18
0
        // Helper
        protected bool updateTexture()
        {
            if (FloatUtils.EQ(_dimensions.x, 0) || FloatUtils.EQ(_dimensions.y, 0))
            {
                _content.mesh.text = _text;
                Bounds  localBounds = getLocalbounds();
                Vector2 textSize    = ccUtils.UnitsToPixels(localBounds.size);
                this.contentSize = textSize;
            }
            else
            {
                string finalText         = "";
                string originalText      = _text;
                int    preEmptyCharIndex = -1;
                for (int i = 1; i <= originalText.Length; i++)
                {
                    char c = originalText[i - 1];
                    if (char.IsWhiteSpace(c))
                    {
                        preEmptyCharIndex = i - 1;
                    }
                    string tmpStr = originalText.Substring(0, i);
                    if (c == '\n')
                    {
                        finalText   += tmpStr;
                        originalText = originalText.Substring(i);
                        i            = 0;
                    }

                    _content.mesh.text = tmpStr;
                    Bounds  localBounds = getLocalbounds();
                    Vector2 csize       = ccUtils.UnitsToPixels(localBounds.size);
                    if (FloatUtils.Big(csize.x, _dimensions.x))
                    {
                        if (preEmptyCharIndex == -1)
                        {
                            tmpStr = originalText.Substring(0, i);
                        }
                        else
                        {
                            tmpStr            = originalText.Substring(0, preEmptyCharIndex);
                            i                 = preEmptyCharIndex + 1;
                            preEmptyCharIndex = -1;
                        }
                        finalText += tmpStr;
                        if (i < originalText.Length)
                        {
                            finalText   += "\n";
                            originalText = originalText.Substring(i);
                            i            = 0;
                        }
                    }
                    else if (i == originalText.Length)
                    {
                        tmpStr     = originalText.Substring(0, i);
                        finalText += tmpStr;
                        break;
                    }

//					string tmpStr = originalText.Substring(0, i);
//					_content.mesh.text = tmpStr;
//					Vector2 csize = _content.renderer.bounds.size;
//					csize = ccUtils.UnitsToPixels(csize);
//					if(FloatUtils.Small(csize.x , _dimensions.x) || i==1){
//						tmpStr = originalText.Substring(0, i);
//						finalText += tmpStr;
//						if(i<originalText.Length){
//							finalText += "\n";
//							originalText = originalText.Substring(i);
//							i = originalText.Length+1;
//						}else{
//							break;
//						}
//					}
                }
                _content.mesh.text = finalText;
                this.contentSize   = _dimensions;
            }
            _isContentDirty = true;

            return(true);
        }
Пример #19
0
        public virtual void updateTransform()
        {
            if (_isUpdateTransformDirty)
            {
                //position

//				CGAffineTransform tmpAffine = nodeToParentTransform();
//				Vector2 pInParent = CGAffineTransform.CGPointApplyAffineTransform(_anchorPointInPixels, tmpAffine);
//				Vector2 pInUIUnits = ccUtils.PixelsToUnits (pInParent);
//				transform.localPosition = new Vector3 (pInUIUnits.x, pInUIUnits.y, transform.localPosition.z);

//				if(_parent!=null && _parent.ignoreAnchorPointForPosition){
//					CGAffineTransform tmpAffine = _parent.nodeToWorldTransform ();
//					Vector2 pInWorld = CGAffineTransform.CGPointApplyAffineTransform (_position, tmpAffine);
//					Vector2 pInUI = CCDirector.sharedDirector.convertToUI (pInWorld);
//					Vector2 pInUIUnits = ccUtils.PixelsToUnits (pInUI);
//
//					transform.position = new Vector3 (pInUIUnits.x, pInUIUnits.y, 0);
//
//					Vector3 localPos = transform.localPosition;
//					localPos.z = -_positionZ / UIWindow.PIXEL_PER_UNIT;
//					transform.localPosition = localPos;
//				}else{
//					Vector2 pInParentAR = _position;
//					if(_parent==null)
//						pInParentAR = CCDirector.sharedDirector.convertToUI(pInParentAR);
//					else
//						pInParentAR -= _parent._anchorPointInPixels;
//					Vector2 pInUIUnits = ccUtils.PixelsToUnits (pInParentAR);
//					Vector3 pos = transform.localPosition;
//					pos.x = pInUIUnits.x;
//					pos.y = pInUIUnits.y;
//					pos.z = -_positionZ / UIWindow.PIXEL_PER_UNIT;
//					transform.localPosition = pos;
//				}

                Vector2 pInParentAR = _position;
                if (_parent != null && !_parent.ignoreAnchorPointForPosition)
                {
                    pInParentAR -= _parent._anchorPointInPixels;
                }
                Vector2 pInUIUnits = ccUtils.PixelsToUnits(pInParentAR);
                Vector3 pos        = transform.localPosition;
                pos.x = pInUIUnits.x;
                pos.y = pInUIUnits.y;
                pos.z = 0;
                transform.localPosition = pos;


                //rotation
                Vector3 rotation = transform.localEulerAngles;
                rotation.x = 0;
                rotation.z = -_rotation;
                rotation.y = 0;
                bool negativeScaleX = FloatUtils.Small(_scaleX, 0);
                bool negativeScaleY = FloatUtils.Small(_scaleY, 0);
                if (negativeScaleX && negativeScaleY)
                {
                    rotation.z = 180 - _rotation;
                }
                else if (negativeScaleX)
                {
                    rotation.y = 180;
                    rotation.z = _rotation;
                }
                else if (negativeScaleY)
                {
                    rotation.y = 180;
                    rotation.z = _rotation + 180;
                }

                transform.localEulerAngles = rotation;

                //scale
                transform.localScale = new Vector3(Mathf.Abs(_scaleX), Mathf.Abs(_scaleY), transform.localScale.z);

                _isUpdateTransformDirty = false;
            }
        }