int main() { int i, n; Rectangle rect; Line line; scanf("%d", &n); for (i=0; i < n; i++) { scanf("%d %d %d %d", &line.p1.x, &line.p1.y, &line.p2.x, &line.p2.y ); scanf("%d %d %d %d", &rect.tleft.x, &rect.tleft.y, &rect.bright.x, &rect.bright.y ); printf("%c\n", intersectRect(rect, line) ? 'T' : 'F' ); } return 0; }
void EraserTool::itemPressed(QGraphicsItem *item, const TupBrushManager *brush, const QPointF &pos) { QList<QGraphicsItem *> collides = item->collidingItems(); if (collides.count() == 0) { QRect intersectRect(pos.x() - (brush->pen().width()/2), pos.y() - (brush->pen().width())/2, brush->pen().width(), brush->pen().width()); TupPathItem *path = qgraphicsitem_cast<TupPathItem*>(item); if (!path) { /* QString conv = "<convert type=\"2\" />"; // to path type TupProjectRequest *event = new TupProjectRequest(TupProjectRequest::Convert, scene->currentSceneIndex(), scene->currentLayerIndex(), scene->currentFrameIndex(), scene->currentFrame()->graphics().indexOf(item), conv); addProjectRequest(event); */ } else { QPainterPath ppath = path->path(); } } }
void Scale9Sprite::createSlicedSprites() { float w = _originalSize.width; float h = _originalSize.height; Vec2 offsetPosition(ceil(_offset.x + (_originalSize.width - _spriteRect.size.width) / 2), ceil(_offset.y + (_originalSize.height - _spriteRect.size.height) / 2)); // If there is no specified center region if ( _capInsetsInternal.equals(Rect::ZERO) ) { // log("... cap insets not specified : using default cap insets ..."); _capInsetsInternal = Rect(w/3, h/3, w/3, h/3); } Rect originalRect; if(_spriteFrameRotated) originalRect = Rect(_spriteRect.origin.x - offsetPosition.y, _spriteRect.origin.y - offsetPosition.x, _originalSize.width, _originalSize.height); else originalRect = Rect(_spriteRect.origin.x - offsetPosition.x, _spriteRect.origin.y - offsetPosition.y, _originalSize.width, _originalSize.height); float left_w = _capInsetsInternal.origin.x; float center_w = _capInsetsInternal.size.width; float right_w = originalRect.size.width - (left_w + center_w); float top_h = _capInsetsInternal.origin.y; float center_h = _capInsetsInternal.size.height; float bottom_h = originalRect.size.height - (top_h + center_h); // calculate rects // ... top row float x = 0.0; float y = 0.0; Rect pixelRect = Rect(offsetPosition.x, offsetPosition.y, _spriteRect.size.width, _spriteRect.size.height); // top left Rect lefttopboundsorig = Rect(x, y, left_w, top_h); Rect lefttopbounds = lefttopboundsorig; // top center TRANSLATE_X(x, y, left_w); Rect centertopbounds = Rect(x, y, center_w, top_h); // top right TRANSLATE_X(x, y, center_w); Rect righttopbounds = Rect(x, y, right_w, top_h); // ... center row x = 0.0; y = 0.0; TRANSLATE_Y(x, y, top_h); // center left Rect leftcenterbounds = Rect(x, y, left_w, center_h); // center center TRANSLATE_X(x, y, left_w); Rect centerboundsorig = Rect(x, y, center_w, center_h); Rect centerbounds = centerboundsorig; // center right TRANSLATE_X(x, y, center_w); Rect rightcenterbounds = Rect(x, y, right_w, center_h); // ... bottom row x = 0.0; y = 0.0; TRANSLATE_Y(x, y, top_h); TRANSLATE_Y(x, y, center_h); // bottom left Rect leftbottombounds = Rect(x, y, left_w, bottom_h); // bottom center TRANSLATE_X(x, y, left_w); Rect centerbottombounds = Rect(x, y, center_w, bottom_h); // bottom right TRANSLATE_X(x, y, center_w); Rect rightbottomboundsorig = Rect(x, y, right_w, bottom_h); Rect rightbottombounds = rightbottomboundsorig; if((_capInsetsInternal.origin.x + _capInsetsInternal.size.width) <= _originalSize.width || (_capInsetsInternal.origin.y + _capInsetsInternal.size.height) <= _originalSize.height) //in general case it is error but for legacy support we will check it { lefttopbounds = intersectRect(lefttopbounds, pixelRect); centertopbounds = intersectRect(centertopbounds, pixelRect); righttopbounds = intersectRect(righttopbounds, pixelRect); leftcenterbounds = intersectRect(leftcenterbounds, pixelRect); centerbounds = intersectRect(centerbounds, pixelRect); rightcenterbounds = intersectRect(rightcenterbounds, pixelRect); leftbottombounds = intersectRect(leftbottombounds, pixelRect); centerbottombounds = intersectRect(centerbottombounds, pixelRect); rightbottombounds = intersectRect(rightbottombounds, pixelRect); } else //it is error but for legacy turn off clip system CCLOG("Scale9Sprite capInsetsInternal > originalSize"); Rect rotatedlefttopboundsorig = lefttopboundsorig; Rect rotatedcenterboundsorig = centerboundsorig; Rect rotatedrightbottomboundsorig = rightbottomboundsorig; Rect rotatedcenterbounds = centerbounds; Rect rotatedrightbottombounds = rightbottombounds; Rect rotatedleftbottombounds = leftbottombounds; Rect rotatedrighttopbounds = righttopbounds; Rect rotatedlefttopbounds = lefttopbounds; Rect rotatedrightcenterbounds = rightcenterbounds; Rect rotatedleftcenterbounds = leftcenterbounds; Rect rotatedcenterbottombounds = centerbottombounds; Rect rotatedcentertopbounds = centertopbounds; if (!_spriteFrameRotated) { AffineTransform t = AffineTransform::IDENTITY; t = AffineTransformTranslate(t, originalRect.origin.x, originalRect.origin.y); rotatedlefttopboundsorig = RectApplyAffineTransform(rotatedlefttopboundsorig, t); rotatedcenterboundsorig = RectApplyAffineTransform(rotatedcenterboundsorig, t); rotatedrightbottomboundsorig = RectApplyAffineTransform(rotatedrightbottomboundsorig, t); rotatedcenterbounds = RectApplyAffineTransform(rotatedcenterbounds, t); rotatedrightbottombounds = RectApplyAffineTransform(rotatedrightbottombounds, t); rotatedleftbottombounds = RectApplyAffineTransform(rotatedleftbottombounds, t); rotatedrighttopbounds = RectApplyAffineTransform(rotatedrighttopbounds, t); rotatedlefttopbounds = RectApplyAffineTransform(rotatedlefttopbounds, t); rotatedrightcenterbounds = RectApplyAffineTransform(rotatedrightcenterbounds, t); rotatedleftcenterbounds = RectApplyAffineTransform(rotatedleftcenterbounds, t); rotatedcenterbottombounds = RectApplyAffineTransform(rotatedcenterbottombounds, t); rotatedcentertopbounds = RectApplyAffineTransform(rotatedcentertopbounds, t); } else { // set up transformation of coordinates // to handle the case where the sprite is stored rotated // in the spritesheet // log("rotated"); AffineTransform t = AffineTransform::IDENTITY; t = AffineTransformTranslate(t, originalRect.size.height+originalRect.origin.x, originalRect.origin.y); t = AffineTransformRotate(t, 1.57079633f); lefttopboundsorig = RectApplyAffineTransform(lefttopboundsorig, t); centerboundsorig = RectApplyAffineTransform(centerboundsorig, t); rightbottomboundsorig = RectApplyAffineTransform(rightbottomboundsorig, t); centerbounds = RectApplyAffineTransform(centerbounds, t); rightbottombounds = RectApplyAffineTransform(rightbottombounds, t); leftbottombounds = RectApplyAffineTransform(leftbottombounds, t); righttopbounds = RectApplyAffineTransform(righttopbounds, t); lefttopbounds = RectApplyAffineTransform(lefttopbounds, t); rightcenterbounds = RectApplyAffineTransform(rightcenterbounds, t); leftcenterbounds = RectApplyAffineTransform(leftcenterbounds, t); centerbottombounds = RectApplyAffineTransform(centerbottombounds, t); centertopbounds = RectApplyAffineTransform(centertopbounds, t); rotatedlefttopboundsorig.origin = lefttopboundsorig.origin; rotatedcenterboundsorig.origin = centerboundsorig.origin; rotatedrightbottomboundsorig.origin = rightbottomboundsorig.origin; rotatedcenterbounds.origin = centerbounds.origin; rotatedrightbottombounds.origin = rightbottombounds.origin; rotatedleftbottombounds.origin = leftbottombounds.origin; rotatedrighttopbounds.origin = righttopbounds.origin; rotatedlefttopbounds.origin = lefttopbounds.origin; rotatedrightcenterbounds.origin = rightcenterbounds.origin; rotatedleftcenterbounds.origin = leftcenterbounds.origin; rotatedcenterbottombounds.origin = centerbottombounds.origin; rotatedcentertopbounds.origin = centertopbounds.origin; } _topLeftSize = rotatedlefttopboundsorig.size; _centerSize = rotatedcenterboundsorig.size; _bottomRightSize = rotatedrightbottomboundsorig.size; if(_spriteFrameRotated) { float offsetx = (rotatedcenterbounds.origin.x + rotatedcenterbounds.size.height/2) - (rotatedcenterboundsorig.origin.x + rotatedcenterboundsorig.size.height/2); float offsety = (rotatedcenterboundsorig.origin.y + rotatedcenterboundsorig.size.width/2)- (rotatedcenterbounds.origin.y + rotatedcenterbounds.size.width/2); _centerOffset.x = -offsety; _centerOffset.y = offsetx; } else { float offsetx = (rotatedcenterbounds.origin.x + rotatedcenterbounds.size.width/2) - (rotatedcenterboundsorig.origin.x + rotatedcenterboundsorig.size.width/2); float offsety = (rotatedcenterboundsorig.origin.y + rotatedcenterboundsorig.size.height/2)- (rotatedcenterbounds.origin.y + rotatedcenterbounds.size.height/2); _centerOffset.x = offsetx; _centerOffset.y = offsety; } // Centre if(rotatedcenterbounds.size.width > 0 && rotatedcenterbounds.size.height > 0 ) { _centre = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedcenterbounds, _spriteFrameRotated); _centre->retain(); this->addProtectedChild(_centre); } // Top if(rotatedcentertopbounds.size.width > 0 && rotatedcentertopbounds.size.height > 0 ) { _top = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedcentertopbounds, _spriteFrameRotated); _top->retain(); this->addProtectedChild(_top); } // Bottom if(rotatedcenterbottombounds.size.width > 0 && rotatedcenterbottombounds.size.height > 0 ) { _bottom = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedcenterbottombounds, _spriteFrameRotated); _bottom->retain(); this->addProtectedChild(_bottom); } // Left if(rotatedleftcenterbounds.size.width > 0 && rotatedleftcenterbounds.size.height > 0 ) { _left = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedleftcenterbounds, _spriteFrameRotated); _left->retain(); this->addProtectedChild(_left); } // Right if(rotatedrightcenterbounds.size.width > 0 && rotatedrightcenterbounds.size.height > 0 ) { _right = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedrightcenterbounds, _spriteFrameRotated); _right->retain(); this->addProtectedChild(_right); } // Top left if(rotatedlefttopbounds.size.width > 0 && rotatedlefttopbounds.size.height > 0 ) { _topLeft = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedlefttopbounds, _spriteFrameRotated); _topLeft->retain(); this->addProtectedChild(_topLeft); } // Top right if(rotatedrighttopbounds.size.width > 0 && rotatedrighttopbounds.size.height > 0 ) { _topRight = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedrighttopbounds, _spriteFrameRotated); _topRight->retain(); this->addProtectedChild(_topRight); } // Bottom left if(rotatedleftbottombounds.size.width > 0 && rotatedleftbottombounds.size.height > 0 ) { _bottomLeft = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedleftbottombounds, _spriteFrameRotated); _bottomLeft->retain(); this->addProtectedChild(_bottomLeft); } // Bottom right if(rotatedrightbottombounds.size.width > 0 && rotatedrightbottombounds.size.height > 0 ) { _bottomRight = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedrightbottombounds, _spriteFrameRotated); _bottomRight->retain(); this->addProtectedChild(_bottomRight); } }
void GameScene::update(float dt){ _fisherman->update(dt); {//time if (_playing) { _time -= dt; int preSec = _seconds; _seconds = (int)roundf(MAX(0, _time)); if (_seconds <= 5 && _seconds != preSec) { CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("count_down.wav"); } char buff[100]; sprintf(buff, "%02d", _seconds); std::string buffAsStdStr = buff; _timeLabel->setString(buffAsStdStr); if (_time < 0) { CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("count_down_done.wav"); stop(); } } } {//cloud for (int i = 0; i < _clouds.size(); i++) { Cloud *c = _clouds.at(i); c->update(dt); } } {//shark _shark->hurtUpdate(dt); if (_catchedFish && !_shark->getHurt()) { _shark->update(dt); Point fish = _catchedFish->getPosition(); Point shark = _shark->getPosition(); float deltaY = shark.y - fish.y; float deltaX = shark.x - fish.x; float angleInRadians = atan2(deltaY, deltaX); float angleInDegrees = atan2(deltaY, deltaX) * 180 / M_PI; if (fish.x > shark.x) { _shark->setScaleX(-1); _shark->setRotation((angleInDegrees - 180) * -1); } else { _shark->setScaleX(1); _shark->setRotation(angleInDegrees * -1); } float velocity = -3; _shark->setPosition(Point(shark.x + (cos(angleInRadians) * velocity), shark.y + (sin(angleInRadians) * velocity))); if (intersectRect(_shark->getBoundingBox(), _catchedFish->getBoundingBox())) { if (dynamic_cast<Turtle*>(_catchedFish)) { _shark->setHurt(); } removeCatch(false, false); } } else { Point position = _shark->getPosition(); if (position.x < -50 || position.x > _visibleSize.width + 50 || _forceSharkDirection) { _forceSharkDirection = false; float xSpeed = 85; if (position.y > 250) { _shark->setVelocity(Point(position.x < _visibleSize.width/2 ? xSpeed : -xSpeed , -20)); } else if(position.y < 20){ _shark->setVelocity(Point(position.x < _visibleSize.width/2 ? xSpeed : -xSpeed, 10)); } else { _shark->setVelocity(Point(position.x < _visibleSize.width/2 ? xSpeed : -xSpeed, (rand()%2) ? -4 : 4)); } if (_shark->getVelocity().x < 0) { _shark->setScaleX(1); } else { _shark->setScaleX(-1); } } Point vel = _shark->getVelocity(); _shark->setPosition(position.x + (vel.x * dt), position.y + (vel.y * dt)); } } for (int i = 0; i < _fish.size(); i++) { Fish *f = _fish.at(i); f->update(dt); } if (_fisherman->getThrowState() == ThrowStateThrowing) { checkCollision(); if (_catchedFish) { _catchedFish->setPosition(_fisherman->getHookWorldPoint()); } } else { if (_fisherman->getBoatDirection() == BoatDirectionNone){ if (_catchedFish) { removeCatch(false, true); } } else { if(_catchedFish){ removeCatch(true, false); } } } //fish _turtleAddTicker += dt; if (_turtleAddTicker > 8) { _turtleAddTicker -= 8; Turtle *fish = Turtle::create(); this->addChild(fish); _fish.push_back(fish); } _fishAddTicker += dt; if (_fishAddTicker > 2) { _fishAddTicker -= 2; StandardFish *f = StandardFish::create(); this->addChild(f); _fish.push_back(f); } }
cl_event render_bottom(int x, int y, int percentage, int deviceid) { device_kernel_func_params[deviceid] = kernel_func_params; device_kernel_func_params[deviceid].zoom_center[0] = x * displayed_image_width / screen_width; device_kernel_func_params[deviceid].zoom_center[1] = y * displayed_image_height / screen_height; LZ_RECT src1, src2, dest; src1.x = 0; src1.y = 0; src1.w = screen_width; src1.h = screen_height; src2.x = x - zoomAreaRadius; src2.y = y + zoomAreaRadius - zoomAreaDiameter * percentage / 100; src2.w = zoomAreaDiameter; src2.h = zoomAreaDiameter * percentage / 100; intersectRect(dest, src1, src2); device_kernel_func_params[deviceid].lcoffset[0] = -zoomAreaRadius; device_kernel_func_params[deviceid].lcoffset[1] = zoomAreaRadius - zoomAreaDiameter * percentage / 100; if(src2.x < 0) device_kernel_func_params[deviceid].lcoffset[0] += src2.w - dest.w; if(src2.y < 0) device_kernel_func_params[deviceid].lcoffset[1] += src2.h - dest.h; work_dims[deviceid][0] = dest.w; work_dims[deviceid][1] = dest.h; void* memAreaPtr = &((unsigned short*)screen_pixels)[dest.y * screen_width + dest.x]; unsigned int memAreaLen = dest.h * screen_width * bytes_per_pixel; // printf("Bottom mem area %8x - %8x\n", (unsigned int)memAreaPtr, (unsigned int)memAreaPtr + memAreaLen); cl_event event = 0; if (memAreaLen) { if(buffer[deviceid][1]) { clReleaseMemObject(buffer[deviceid][1]); buffer[deviceid][1] = 0; } cl_int error = 0; buffer[deviceid][1] = clCreateBuffer(context[deviceid], CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR, memAreaLen, memAreaPtr, &error); if (buffer[deviceid][1] == (cl_mem)0) { printf("failed to create cl_mem buffer for the bottom rendering, error(%d)\n", error); return event; } error = clSetKernelArg( kernel[deviceid], 1, sizeof(cl_mem), &buffer[deviceid][1] ); if (error != CL_SUCCESS) { printf("failed to create set kernel arg for the bottom rendering, error(%d)\n", error); return event; } error = clEnqueueNDRangeKernel( queue[deviceid], kernel[deviceid], 2, NULL, work_dims[deviceid], NULL, 0, NULL, &event); if (error != CL_SUCCESS) { printf("failed to create enqueue kernel for the bottom rendering, error(%d)\n", error); return event; } } return event; }
void Scale9Sprite::createSlicedSprites() { float width = _originalSize.width; float height = _originalSize.height; Vec2 offsetPosition(ceilf(_offset.x + (_originalSize.width - _spriteRect.size.width) / 2), ceilf(_offset.y + (_originalSize.height - _spriteRect.size.height) / 2)); // If there is no specified center region if ( _capInsetsInternal.equals(Rect::ZERO) ) { // log("... cap insets not specified : using default cap insets ..."); _capInsetsInternal = Rect(width /3, height /3, width /3, height /3); } Rect originalRect=_spriteRect; if(_spriteFrameRotated) originalRect = Rect(_spriteRect.origin.x - offsetPosition.y, _spriteRect.origin.y - offsetPosition.x, _originalSize.width, _originalSize.height); else originalRect = Rect(_spriteRect.origin.x - offsetPosition.x, _spriteRect.origin.y - offsetPosition.y, _originalSize.width, _originalSize.height); float leftWidth = _capInsetsInternal.origin.x; float centerWidth = _capInsetsInternal.size.width; float rightWidth = originalRect.size.width - (leftWidth + centerWidth); float topHeight = _capInsetsInternal.origin.y; float centerHeight = _capInsetsInternal.size.height; float bottomHeight = originalRect.size.height - (topHeight + centerHeight); // calculate rects // ... top row float x = 0.0; float y = 0.0; //why do we need pixelRect? Rect pixelRect = Rect(offsetPosition.x, offsetPosition.y, _spriteRect.size.width, _spriteRect.size.height); // top left Rect leftTopBoundsOriginal = Rect(x, y, leftWidth, topHeight); Rect leftTopBounds = leftTopBoundsOriginal; // top center x += leftWidth; Rect centerTopBounds = Rect(x, y, centerWidth, topHeight); // top right x += centerWidth; Rect rightTopBounds = Rect(x, y, rightWidth, topHeight); // ... center row x = 0.0; y = 0.0; y += topHeight; // center left Rect leftCenterBounds = Rect(x, y, leftWidth, centerHeight); // center center x += leftWidth; Rect centerBoundsOriginal = Rect(x, y, centerWidth, centerHeight); Rect centerBounds = centerBoundsOriginal; // center right x += centerWidth; Rect rightCenterBounds = Rect(x, y, rightWidth, centerHeight); // ... bottom row x = 0.0; y = 0.0; y += topHeight; y += centerHeight; // bottom left Rect leftBottomBounds = Rect(x, y, leftWidth, bottomHeight); // bottom center x += leftWidth; Rect centerBottomBounds = Rect(x, y, centerWidth, bottomHeight); // bottom right x += centerWidth; Rect rightBottomBoundsOriginal = Rect(x, y, rightWidth, bottomHeight); Rect rightBottomBounds = rightBottomBoundsOriginal; if((_capInsetsInternal.origin.x + _capInsetsInternal.size.width) <= _originalSize.width || (_capInsetsInternal.origin.y + _capInsetsInternal.size.height) <= _originalSize.height) //in general case it is error but for legacy support we will check it { leftTopBounds = intersectRect(leftTopBounds, pixelRect); centerTopBounds = intersectRect(centerTopBounds, pixelRect); rightTopBounds = intersectRect(rightTopBounds, pixelRect); leftCenterBounds = intersectRect(leftCenterBounds, pixelRect); centerBounds = intersectRect(centerBounds, pixelRect); rightCenterBounds = intersectRect(rightCenterBounds, pixelRect); leftBottomBounds = intersectRect(leftBottomBounds, pixelRect); centerBottomBounds = intersectRect(centerBottomBounds, pixelRect); rightBottomBounds = intersectRect(rightBottomBounds, pixelRect); } else //it is error but for legacy turn off clip system CCLOG("Scale9Sprite capInsetsInternal > originalSize"); Rect rotatedLeftTopBoundsOriginal = leftTopBoundsOriginal; Rect rotatedCenterBoundsOriginal = centerBoundsOriginal; Rect rotatedRightBottomBoundsOriginal = rightBottomBoundsOriginal; Rect rotatedCenterBounds = centerBounds; Rect rotatedRightBottomBounds = rightBottomBounds; Rect rotatedLeftBottomBounds = leftBottomBounds; Rect rotatedRightTopBounds = rightTopBounds; Rect rotatedLeftTopBounds = leftTopBounds; Rect rotatedRightCenterBounds = rightCenterBounds; Rect rotatedLeftCenterBounds = leftCenterBounds; Rect rotatedCenterBottomBounds = centerBottomBounds; Rect rotatedCenterTopBounds = centerTopBounds; if (!_spriteFrameRotated) { AffineTransform t = AffineTransform::IDENTITY; t = AffineTransformTranslate(t, originalRect.origin.x, originalRect.origin.y); rotatedLeftTopBoundsOriginal = RectApplyAffineTransform(rotatedLeftTopBoundsOriginal, t); rotatedCenterBoundsOriginal = RectApplyAffineTransform(rotatedCenterBoundsOriginal, t); rotatedRightBottomBoundsOriginal = RectApplyAffineTransform(rotatedRightBottomBoundsOriginal, t); rotatedCenterBounds = RectApplyAffineTransform(rotatedCenterBounds, t); rotatedRightBottomBounds = RectApplyAffineTransform(rotatedRightBottomBounds, t); rotatedLeftBottomBounds = RectApplyAffineTransform(rotatedLeftBottomBounds, t); rotatedRightTopBounds = RectApplyAffineTransform(rotatedRightTopBounds, t); rotatedLeftTopBounds = RectApplyAffineTransform(rotatedLeftTopBounds, t); rotatedRightCenterBounds = RectApplyAffineTransform(rotatedRightCenterBounds, t); rotatedLeftCenterBounds = RectApplyAffineTransform(rotatedLeftCenterBounds, t); rotatedCenterBottomBounds = RectApplyAffineTransform(rotatedCenterBottomBounds, t); rotatedCenterTopBounds = RectApplyAffineTransform(rotatedCenterTopBounds, t); } else { // set up transformation of coordinates // to handle the case where the sprite is stored rotated // in the spritesheet // log("rotated"); AffineTransform t = AffineTransform::IDENTITY; t = AffineTransformTranslate(t, originalRect.size.height+originalRect.origin.x, originalRect.origin.y); t = AffineTransformRotate(t, 1.57079633f); leftTopBoundsOriginal = RectApplyAffineTransform(leftTopBoundsOriginal, t); centerBoundsOriginal = RectApplyAffineTransform(centerBoundsOriginal, t); rightBottomBoundsOriginal = RectApplyAffineTransform(rightBottomBoundsOriginal, t); centerBounds = RectApplyAffineTransform(centerBounds, t); rightBottomBounds = RectApplyAffineTransform(rightBottomBounds, t); leftBottomBounds = RectApplyAffineTransform(leftBottomBounds, t); rightTopBounds = RectApplyAffineTransform(rightTopBounds, t); leftTopBounds = RectApplyAffineTransform(leftTopBounds, t); rightCenterBounds = RectApplyAffineTransform(rightCenterBounds, t); leftCenterBounds = RectApplyAffineTransform(leftCenterBounds, t); centerBottomBounds = RectApplyAffineTransform(centerBottomBounds, t); centerTopBounds = RectApplyAffineTransform(centerTopBounds, t); rotatedLeftTopBoundsOriginal.origin = leftTopBoundsOriginal.origin; rotatedCenterBoundsOriginal.origin = centerBoundsOriginal.origin; rotatedRightBottomBoundsOriginal.origin = rightBottomBoundsOriginal.origin; rotatedCenterBounds.origin = centerBounds.origin; rotatedRightBottomBounds.origin = rightBottomBounds.origin; rotatedLeftBottomBounds.origin = leftBottomBounds.origin; rotatedRightTopBounds.origin = rightTopBounds.origin; rotatedLeftTopBounds.origin = leftTopBounds.origin; rotatedRightCenterBounds.origin = rightCenterBounds.origin; rotatedLeftCenterBounds.origin = leftCenterBounds.origin; rotatedCenterBottomBounds.origin = centerBottomBounds.origin; rotatedCenterTopBounds.origin = centerTopBounds.origin; } _topLeftSize = rotatedLeftTopBoundsOriginal.size; _centerSize = rotatedCenterBoundsOriginal.size; _bottomRightSize = rotatedRightBottomBoundsOriginal.size; if(_isPatch9) { _topLeftSize.width = _topLeftSize.width - 1; _topLeftSize.height = _topLeftSize.height - 1; _bottomRightSize.width = _bottomRightSize.width - 1; _bottomRightSize.height = _bottomRightSize.height - 1; } if(_spriteFrameRotated) { float offsetX = (rotatedCenterBounds.origin.x + rotatedCenterBounds.size.height/2) - (rotatedCenterBoundsOriginal.origin.x + rotatedCenterBoundsOriginal.size.height/2); float offsetY = (rotatedCenterBoundsOriginal.origin.y + rotatedCenterBoundsOriginal.size.width/2) - (rotatedCenterBounds.origin.y + rotatedCenterBounds.size.width/2); _centerOffset.x = -offsetY; _centerOffset.y = offsetX; } else { float offsetX = (rotatedCenterBounds.origin.x + rotatedCenterBounds.size.width/2) - (rotatedCenterBoundsOriginal.origin.x + rotatedCenterBoundsOriginal.size.width/2); float offsetY = (rotatedCenterBoundsOriginal.origin.y + rotatedCenterBoundsOriginal.size.height/2) - (rotatedCenterBounds.origin.y + rotatedCenterBounds.size.height/2); _centerOffset.x = offsetX; _centerOffset.y = offsetY; } //shrink the image size when it is 9-patch if(_isPatch9) { float offset = 1.4f; //Top left if(!_spriteFrameRotated) { rotatedLeftTopBounds.origin.x+=offset; rotatedLeftTopBounds.origin.y+=offset; rotatedLeftTopBounds.size.width-=offset; rotatedLeftTopBounds.size.height-=offset; //Center left rotatedLeftCenterBounds.origin.x+=offset; rotatedLeftCenterBounds.size.width-=offset; //Bottom left rotatedLeftBottomBounds.origin.x+=offset; rotatedLeftBottomBounds.size.width-=offset; rotatedLeftBottomBounds.size.height-=offset; //Top center rotatedCenterTopBounds.size.height-=offset; rotatedCenterTopBounds.origin.y+=offset; //Bottom center rotatedCenterBottomBounds.size.height-=offset; //Top right rotatedRightTopBounds.size.width-=offset; rotatedRightTopBounds.size.height-=offset; rotatedRightTopBounds.origin.y+=offset; //Center right rotatedRightCenterBounds.size.width-=offset; //Bottom right rotatedRightBottomBounds.size.width-=offset; rotatedRightBottomBounds.size.height-=offset; } else { //Top left rotatedLeftTopBounds.size.width-=offset; rotatedLeftTopBounds.size.height-=offset; rotatedLeftTopBounds.origin.y+=offset; //Center left rotatedLeftCenterBounds.origin.y+=offset; rotatedLeftCenterBounds.size.width-=offset; //Bottom left rotatedLeftBottomBounds.origin.x+=offset; rotatedLeftBottomBounds.origin.y+=offset; rotatedLeftBottomBounds.size.width-=offset; rotatedLeftBottomBounds.size.height-=offset; //Top center rotatedCenterTopBounds.size.height-=offset; //Bottom center rotatedCenterBottomBounds.size.height-=offset; rotatedCenterBottomBounds.origin.x+=offset; //Top right rotatedRightTopBounds.size.width-=offset; rotatedRightTopBounds.size.height-=offset; //Center right rotatedRightCenterBounds.size.width-=offset; //Bottom right rotatedRightBottomBounds.size.width-=offset; rotatedRightBottomBounds.size.height-=offset; rotatedRightBottomBounds.origin.x+=offset; } } // Centre if(rotatedCenterBounds.size.width > 0 && rotatedCenterBounds.size.height > 0 ) { _centerSprite = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedCenterBounds, _spriteFrameRotated); _centerSprite->retain(); this->addProtectedChild(_centerSprite); } // Top if(rotatedCenterTopBounds.size.width > 0 && rotatedCenterTopBounds.size.height > 0 ) { _topSprite = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedCenterTopBounds, _spriteFrameRotated); _topSprite->retain(); this->addProtectedChild(_topSprite); } // Bottom if(rotatedCenterBottomBounds.size.width > 0 && rotatedCenterBottomBounds.size.height > 0 ) { _bottomSprite = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedCenterBottomBounds, _spriteFrameRotated); _bottomSprite->retain(); this->addProtectedChild(_bottomSprite); } // Left if(rotatedLeftCenterBounds.size.width > 0 && rotatedLeftCenterBounds.size.height > 0 ) { _leftSprite = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedLeftCenterBounds, _spriteFrameRotated); _leftSprite->retain(); this->addProtectedChild(_leftSprite); } // Right if(rotatedRightCenterBounds.size.width > 0 && rotatedRightCenterBounds.size.height > 0 ) { _rightSprite = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedRightCenterBounds, _spriteFrameRotated); _rightSprite->retain(); this->addProtectedChild(_rightSprite); } // Top left if(rotatedLeftTopBounds.size.width > 0 && rotatedLeftTopBounds.size.height > 0 ) { _topLeftSprite = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedLeftTopBounds, _spriteFrameRotated); _topLeftSprite->retain(); this->addProtectedChild(_topLeftSprite); } // Top right if(rotatedRightTopBounds.size.width > 0 && rotatedRightTopBounds.size.height > 0 ) { _topRightSprite = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedRightTopBounds, _spriteFrameRotated); _topRightSprite->retain(); this->addProtectedChild(_topRightSprite); } // Bottom left if(rotatedLeftBottomBounds.size.width > 0 && rotatedLeftBottomBounds.size.height > 0 ) { _bottomLeftSprite = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedLeftBottomBounds, _spriteFrameRotated); _bottomLeftSprite->retain(); this->addProtectedChild(_bottomLeftSprite); } // Bottom right if(rotatedRightBottomBounds.size.width > 0 && rotatedRightBottomBounds.size.height > 0 ) { _bottomRightSprite = Sprite::createWithTexture(_scale9Image->getTexture(), rotatedRightBottomBounds, _spriteFrameRotated); _bottomRightSprite->retain(); this->addProtectedChild(_bottomRightSprite); } }