宇宙船がレイヤーを通過する小さなゲームを開発中ですが、状況によっては宇宙船が敵に近づき、レイヤー全体がズームインされます宇宙船のズームレベルは船と敵の距離に依存します。これらはすべて正常に動作します。ズームレイヤーをスプライトの中央に配置
しかし、主な質問は、ズームを宇宙船の中心に維持する方法です。
現在、私はupdateメソッドを通じてGameLayerオブジェクトにズームを制御し、ここでのコードは次のとおりです。
-(void) prepareLayerZoomBetweenSpaceship{
CGPoint mainSpaceShipPosition = [mainSpaceShip position];
CGPoint enemySpaceShipPosition = [enemySpaceShip position];
float distance = powf(mainSpaceShipPosition.x - enemySpaceShipPosition.x, 2) + powf(mainSpaceShipPosition.y - enemySpaceShipPosition.y,2);
distance = sqrtf(distance);
/*
Distance > 250 --> no zoom
Distance < 100 --> maximum zoom
*/
float myZoomLevel = 0.5f;
if(distance < 100){ //maximum zoom in
myZoomLevel = 1.0f;
}else if(distance > 250){
myZoomLevel = 0.5f;
}else{
myZoomLevel = 1.0f - (distance-100)*0.0033f;
}
[self zoomTo:myZoomLevel];
}
-(void) zoomTo:(float)zoom {
if(zoom > 1){
zoom = 1;
}
// Set the scale.
if(self.scale != zoom){
self.scale = zoom;
}
}
基本的に私の質問は:どのように私はレイヤーをズームしないと2隻の間で正確にセンタリング?私はこれが2本の指でピンチズームのようなものだと思います!
ズームがship.Alsoに焦点を当てていることを示唆しているこのコードには何もありません。ユーザーインタラクションを通じて画面上を自由に移動できる船か、固定されていて、レイヤーを移動していますか? – skytz
こんにちは、船はジョイスティックで制御されています。私の質問は、実際にはどのようにズームされているときに船にレイヤーをフォーカスすることです:) – clops
私は決定的な答えを与えるが、一般的に知る必要があります:中心点の位置を取得し、それらのコードの。次に、それらのコードをスケールで掛けます。 – tustvold