0

で開発されたコードによって独自のレベルを描画する迷路ゲームを実装しようとしていますdrawRect。コードによって描画される画像のコンテンツの境界を検出する方法を知る必要があります。

私はUIButtonこのコードを使用してドラッグするウィッチを使用しています:

- (void)viewDidLoad
{
    [super viewDidLoad];
     map = [[mapView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
    [self.view addSubview:map];

    self.view.backgroundColor = [UIColor blackColor];
    meButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [meButton setTitle:@"Drag me!" forState:UIControlStateNormal];
    meButton.backgroundColor = [UIColor yellowColor];
    [meButton addTarget:self action:@selector(wasDragged:withEvent:) forControlEvents:UIControlEventTouchDragInside];

    meButton.frame = CGRectMake(100,100,50, 50);

    [self.view addSubview:meButton];
 }



- (void)wasDragged:(UIButton *)button withEvent:(UIEvent *)event
{
    UITouch *touch = [[event touchesForView:button] anyObject];

    CGPoint previousLocation = [touch previousLocationInView:button];
    CGPoint location = [touch locationInView:button];
    CGFloat delta_x = location.x - previousLocation.x;
    CGFloat delta_y = location.y - previousLocation.y;

    // move button
    button.center = CGPointMake(button.center.x + delta_x,
                            button.center.y + delta_y);
    if(CGRectIntersectsRect(button.frame, map.frame)) {

        NSLog(@"CGRectIntersectsRect");

    }
}

このコードはマップを描画するためのものです(まだ正しく実装されていません)

- (void)drawRect:(CGRect)rect;
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 0.0, 1.0); // yellow line

    CGContextBeginPath(context);

    CGContextMoveToPoint(context, 50.0, 50.0); //start point
    CGContextAddLineToPoint(context, 250.0, 100.0);
    CGContextAddLineToPoint(context, 250.0, 350.0);
    CGContextAddLineToPoint(context, 50.0, 350.0); // end path

    CGContextClosePath(context); // close path

    CGContextSetLineWidth(context, 8.0); // this is set from now on until you explicitly change it

    CGContextStrokePath(context); // do actual stroking

    CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 0.5); // green color, half transparent
    CGContextFillRect(context, CGRectMake(20.0, 250.0, 128.0, 128.0)); // a square at the bottom left-hand corner
}
4

1 に答える 1

1

したがって、これを実際に達成するには2つの方法があります。最初の、そして私の意見では難しいオプションは、現在迷路にいるピクセルをテストし、色が壁に対応しているかどうかを確認することです。この方法には、最適ではないことを意味する微妙な問題がいくつかあります。

より良いアプローチは、画面をタイルのグリッド (サイズが 10x10px など) に分割し、これを使用して迷路のマップを保持することです (たとえば、2 次元ブール配列を使用)。そうすれば、現在いるタイルを簡単に調べて、どの方向に移動できるかを確認できます。これは、迷路を扱うためのかなり標準的なアプローチです。

于 2012-12-16T10:53:27.280 に答える