1

私はゲームの開発に忙しくしていて、難しい部分の1つに取り組んできました。私はこれを行う方法について完全に間違った足のうねりにあるかもしれません。

私が持っているのは、ボード上のいくつかのイメージビューです。それらは、私がそれらにドラッグするオブジェクト(タイル)のホルダーです。(これも、これが最善の方法なのか、それとも正しい方法なのかわかりません。)

たとえば、私が意味することを表示するための画像を作成しました。

この画像には、一番上のタイルの1つにドラッグしたい画像(A)があります。コードは、(A)が最も配置されている画像ビューの上に自動検出し、そのビューに配置する必要があります。

ここに画像の説明を入力してください

私は本当にここで立ち往生していて、これを行う方法やこのようなことを行う別の方法についての情報が欲しいです。

Aはすでにドラッグ可能です。

4

2 に答える 2

2

bool CGRectIntersectsRect (CGRect rectA,CGRect rect1);(rect1またはrect2または3または4)を使用して、「A」のフレームと4つの上部タイルのいずれかとの交差を確認できます。

交差した後、各タイルの中心から「A」の中心までの最小距離をチェックして、どのタイルにAが最も多く含まれているかをチェックできます。(すべてUIViewcenterプロパティがあります)

これは、すべてのタイルとAが別々のビューであると想定しています。

または、考え直してみると、チェックする前に最小距離を維持しながら中心間の最小距離をチェックし、最初のステップを完全に回避することができます。

CGFloat xDist = (p2.x - p1.x);
CGFloat yDist = (p2.y - p1.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
  • 上記のコードを使用して、2つのCGPoint(中心)間の距離を計算できます。2つのCGポイント間の距離を見つける方法から その単純なピタゴラス定理。:)
于 2013-02-27T16:21:44.570 に答える
1

ジェスチャーのプロパティを作成します。

@property (nonatomic, strong) UILongPressGestureRecognizer *longPress;

それを初期化します:

self.longPress = [UILongPressGestureRecognizer initWithTarget:self action:@selector(gestureRecognizedStateDidChanged:)];
self.longPress.minimumPressDuration = 0.03;

ビューコントローラクラスは<UIGestureRecognizerDelegate>プロトコルを実装する必要があります。

self.longPress.delegate = self;

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)sender {
return CGRectContainsPoint(self.targetImage.frame, [sender locationInView:self.view]);
}

- (void)gestureRecognizedStateDidChanged:(UILongPressGestureRecognizer *)sender {
switch (recognizer.state) {
        case UIGestureRecognizerStatePossible:
        case UIGestureRecognizerStateBegan: {
        // did started, you can pick up your view
        self.targerImageView.center = [sender locationInView:self.view];
        break;
    }
    case UIGestureRecognizerStateFailed:
    case UIGestureRecognizerStateCancelled:
    case UIGestureRecognizerStateEnded: {
        // drop callback, bring you view home or to target
        if (CGRectContainsPoint(self.toDropImageViews.frame, [sender locationInView:self.view]) {
            // do you drop code here
        }
        break;
    }
    case UIGestureRecognizerStateChanged: {
        self.targerImageView.center = [sender locationInView:self.view];
        // moving callback
        break;
        }
    }
于 2013-02-27T16:51:38.723 に答える