iPadアプリの設定:SceneAにはレイヤA - 1024x768が含まれています。レイヤーAのボタンを押すと、レイヤーBがCCMoveToアクションを使用して上にドロップされます。 LayerBは800x600しかないので、その背後にあるlayerAを見ることができます(オーバーレイされた一時停止画面タイプのエフェクトを考えてみましょう)。 LayerBには800x600のスプライトが含まれており、ユーザーはボタンを押して拡大することができます。ズームエフェクトは、CCScaleToとCCMoveToを組み合わせるだけで、ズームしている部分の中央に配置できます。しかし、スプライトがスケールすると、レイヤーAのレイヤーBもオーバースケールされます。含まれているウィンドウ内でスプライトを拡大/縮小する方法はありますか?Cocos2dスケーリングレイヤーなしでスプライトをスケールする方法は?または、スプライト/レイヤーをスケールしてトリミングする方法は?
2
A
答えて
1
レイヤBは、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
- LayerB
にインポートしたものと
//
// 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
を、あなたは今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. Cocos2d:レイヤーをスプライトにスケールする
- 2. Scalaでリポジトリパターンをスケールする方法は?
- 3. JavaでBigDecimalをスケールする方法は?
- 4. libgdxでtiledDrawableをスケールする方法は?
- 5. テーブルビューでUIImageをスケールする方法は?
- 6. CAConstraintのスケールをバインドする方法は?
- 7. SKPhysicsBodyをスケールする方法は?
- 8. 画像ビューをコードなしでスケールする方法は?
- 9. 1軸でスプライトを比例的にスケールする方法 - swift/spritekit
- 10. スクリーン解像度に応じてlibgdxのスプライトをスケールする方法は?
- 11. スプライトをas3でスケールしますか?
- 12. Python matplotlibで3d Quiverダイアグラムを正しくスケールする方法は?
- 13. ページ上でダイグラフを正しくスケールする方法は?
- 14. 私のアンドロイドアプリケーションをスケール(またはクラウド対応)する方法
- 15. 特別な範囲[0.9 1.1]でデータをスケールする方法は?
- 16. scikit-learnで大規模なデータをスケールする方法は?
- 17. spark flatMap/reduce:OutOfMemoryをスケールして避ける方法は?
- 18. 会社でbuildbotをスケールする方法
- 19. ployfitを使用してデータをセンタリングしてスケールする方法
- 20. wxpythonを使ってプロットをスケールする方法は?
- 21. Raphaelで縦方向にスケールする方法は?
- 22. スプリングクラウドデータフローサーバーのスケール方法
- 23. CherryPyのスケール方法?
- 24. cocos2dで衝突検出を使用してスプライトをスタックする方法は?
- 25. 最小/最大を使用してRでベクトルデータをスケールする方法は?
- 26. FontForge:グリフをスケールする方法
- 27. reactjsコンポーネントをブラウザにスケールする方法
- 28. ベジエパスを再スケールする方法
- 29. ジオロケーションWebアプリケーションをスケールする方法
- 30. Basemapで同じ色のスケールを維持する方法は?
コードを使用すると完全に動作するようです!それは実装が簡単ではなかった。私のアプリはランドスケープオリエンテーションなので、コード内で何も変更する必要はありませんでした。 CCScaleToとMoveToが移動する限り、私は実際には、ユーザーが触れる位置に基づいてレイヤーの異なるポイントをズームインしています。しかし、良い点。本当にありがとう! – BobbyScon
問題は解決しましたが、どのように動作し、何ができるのかを完全に理解しようとするには、 'GlScissor'を調べることをお勧めします。どういたしまして。 –
ええ、あなたの投稿を見たら(約3分後)、私はGoogle検索を行い、あなたが投稿した同じリンクの多くを見つけました。私の問題は、本当に何を探したらいいのか分からないケースでした。以前はGLScissorについて聞いていなかった。あなたのコードはLearn-Cocos2d.com – BobbyScon