iPad App setup: SceneA содержит layerA - 1024x768. Нажмите кнопку в layerA, слой B опустится сверху, используя действие CCMoveTo. LayerB - всего 800x600, поэтому вы можете видеть layerA за ним (подумайте о эффекте типа наложенного эффекта паузы). LayerB содержит спрайт 800x600, который пользователь может увеличить, нажав кнопку. Эффект масштабирования - это просто комбинация CCScaleTo и CCMoveTo, чтобы он был сосредоточен на части, в которой он масштабируется. Однако, когда масштаб спрайтов, так же, как и верхний слой layerB слоя layerA. Есть ли способ масштабирования спрайта внутри содержащегося окна?Cocos2d как масштабировать спрайт без масштабирования слоя? Или, как масштабировать и обрезать спрайт/слой?
ответ
LayerB должен использовать GL_SCISSOR_TEST
, чтобы обрезать внешнюю сторону. Вы можете легко найти Google для получения дополнительной информации об этом, он в основном определяет rect
, а затем использует glScissor
, чтобы удалить наружу. У меня есть класс, я продлить, когда мне нужно, чтобы сделать это, что происходит следующим образом:
//
// CCNodeClip.h
//
// Created by Ignacio Orlandoni on 7/29/11.
//
#import <Foundation/Foundation.h>
#import "cocos2d.h"
@interface CCNodeClip : CCLayer {
}
-(void)preVisit;
-(void)postVisit;
@end
-
//
// CCNodeClip.m
//
// Created by Ignacio Orlandoni on 7/29/11.
//
#import "CCNodeClip.h"
@implementation CCNodeClip
-(void)visit {
[self preVisit];
[super visit];
[self postVisit];
}
-(void)preVisit {
if (!self.visible)
return;
glEnable(GL_SCISSOR_TEST);
CGPoint position = [self position];
//I don't remember if this rect really serves for both orientations, so you may need to change the order of the values here.
CGRect scissorRect = CGRectMake(position.x, position.y, [self contentSize].width, [self contentSize].height);
// CCLOG(@"Scrissor Rect: X: %02f, Y:%02f, W: %02f, H: %02f", scissorRect.origin.x, scissorRect.origin.y, scissorRect.size.width, scissorRect.size.height);
// Handle Retina
scissorRect = CC_RECT_POINTS_TO_PIXELS(scissorRect);
glScissor((GLint) scissorRect.origin.x, (GLint) scissorRect.origin.y,
(GLint) scissorRect.size.width, (GLint) scissorRect.size.height);
}
-(void)postVisit {
glDisable(GL_SCISSOR_TEST);
}
@end
С этим импортирован в LayerB
, теперь вы можете определить его как вместо него CCNodeClip
из CCLayer
,
Некоторые ссылки ...
Circle shape clipping with opengl-es in cocos2d << StackOverflow
Cocos2d iPhone - Sprite cliping/mask/frame << StackOverflow
Another Cocos2D gem: ClippingNode << Learn-Cocos2d.com
Как примечание стороны ...
CCScaleTo + CCMoveTo можно избежать, если опорная точка для спрайта центрирована, поэтому изображение остается центрированным в контейнере по мере его масштабирования. (.anchorPoint = ccp(0.5, 0.5);
)
- 1. Как обрезать и масштабировать форму
- 2. Как масштабировать спрайт в libgdx?
- 3. Как масштабировать div без масштабирования содержимого
- 4. Старлинг: Спрайт нельзя масштабировать
- 5. Как масштабировать спрайт (2D) с помощью матрицы
- 6. Как масштабировать, поворачивать и обрезать изображение
- 7. Как обрезать и масштабировать текстуру в OpenGL
- 8. Как правильно масштабировать batchnode в cocos2d?
- 9. Масштабировать parentLayout без масштабирования его childView
- 10. Как масштабировать (масштабировать) UIView для данного CGPoint
- 11. Как масштабировать приложение Cocos2d на iPhone 5?
- 12. Как масштабировать QGraphicsEllipseItem с уровнем масштабирования QGraphicsView
- 13. Как масштабировать и обрезать изображение с помощью php-imagick?
- 14. Масштабировать и обрезать изображение в XML
- 15. Как масштабировать экранные пиксели?
- 16. Как я могу масштабировать фигуру без масштабирования ее рисунка?
- 17. Могу ли я масштабировать фигуру в box2d, как спрайт?
- 18. JSP Как масштабировать изображение?
- 19. Как масштабировать и переводить3d одновременно?
- 20. Как масштабировать socket.io без redis
- 21. как перевести и масштабировать NSImage?
- 22. css обрезать изображение, затем масштабировать в процентах
- 23. Как масштабировать и позиционировать водяной знак для масштабирования?
- 24. PyQt4: Как масштабировать QWidget?
- 25. Как центрировать или масштабировать изображение ZoomButton?
- 26. Масштабировать, а затем масштабировать до вершины?
- 27. Как обрезать и масштабировать изображение по отношению к другому?
- 28. Как масштабировать и обрезать с помощью imagemagick convert?
- 29. Как масштабировать встроенное флеш-видео и не обрезать его?
- 30. Как масштабировать CGImage оптимальным образом?
Использование вашего кода, похоже, отлично работает! Это было очень легко реализовать. Мое приложение имеет только ориентацию на ландшафт, и мне не нужно ничего менять в коде. Что касается CCScaleTo и MoveTo, я на самом деле масштабируюсь в разных точках слоя, основываясь на том, куда касается пользователя, а не только в центре. Хороший момент. Спасибо! – BobbyScon
Несмотря на то, что проблема решена, я рекомендую вам посмотреть 'GlScissor', чтобы попытаться полностью понять, как это работает и что он может сделать. Добро пожаловать. –
Да, как только я увидел ваше сообщение (примерно через 3 минуты после того, как вы его разместили), я сделал поиск в Google и нашел много тех же ссылок, что и вы. Моя проблема была действительно случай, когда вы не знали, что искать. Раньше я не слышал о GLScissor. Ваш код кажется более эффективным, чем настройка на Learn-Cocos2d.com. – BobbyScon