Collision Detected

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Collision Detected

    Kriege irgendwie die Collision Detected nicht auf die Reihe ;)

    Ich habe zwei UIImageView. Das eine bewegt sich mittels Animation ohne Drag Touch auf das andere (fix Positioniert) zu.
    Die Animation klappt auch hervorragend, aber wie ich es auch immer anstelle, funktioniert die Erkennung wenn die zwei UIImageView's aufeinander treffen nicht.

    Aufgerufen wird die Klasse cShootsItem von gameViewController.m mit der Methode setItems.

    Vielleicht sieht hier jemand, wo bei mir der Denkfehler liegt ;)

    gameViewController.h

    Quellcode

    1. #import
    2. @class cShootItems;
    3. @interface gameViewController : UIViewController{ cShootItems *items;
    4. }



    gameViewController.m

    Quellcode

    1. #import "cShootItems.h"
    2. - (void)viewDidLoad {
    3. [super viewDidLoad];
    4. items =[[cShootItems alloc] init]; ...}
    5. - (void) setItems {
    6. if ([items getpaused] == NO) {
    7. items =[[cShootItems alloc] init];
    8. [items startItems:self.view levelID:1];
    9. [items release];
    10. }
    11. }
    Alles anzeigen



    cShootsItem.m

    Quellcode

    1. - (void) setShoot:(UIImageView*)image{
    2. if (hasShoot == NO) {
    3. [UIView beginAnimations:@"shoot" context:nil];
    4. //[UIView setAnimationDelegate:self];
    5. [UIView setAnimationWillStartSelector:@selector(didStart:context:)];
    6. [UIView setAnimationDidStopSelector:@selector(didStop:finished:context:)];
    7. [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    8. [UIView setAnimationDuration:1.0];
    9. shootItem.transform = CGAffineTransformMakeTranslation(_xTransF, _yTransF);
    10. [UIView commitAnimations];
    11. btnAniStarted = FALSE;
    12. shootTimer=[NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
    13. collisionTimer=[NSTimer scheduledTimerWithTimeInterval: 0.03 target:self selector:@selector(checkCollison) userInfo:nil repeats:YES];
    14. }else {
    15. shootItem.transform = CGAffineTransformIdentity;
    16. }
    17. }
    18. - (void) checkCollison{
    19. if (!paused) {
    20. CGRect frame1 = shootItem.frame;
    21. CGRect frame2 = heroHit.frame;
    22. if (CGRectIntersectsRect(frame1, frame2) || CGRectContainsRect(frame1, frame2) || CGRectContainsRect(frame2, frame1)) {
    23. NSLog(@"Hero getroffen!");
    24. }
    25. NSLog(@"enemy Y:%f enemy X:%f",frame1.origin.y,frame1.origin.x);
    26. }
    27. }
    28. - (void)setShootItem:(UIImageView*)image{
    29. shootRect = CGRectMake(0.0f, 0.0f, 78.0, 70.0);
    30. shootRect.origin = CGPointMake(_xPoint2, _yPoint2);
    31. //shootItem=gameview.imgShoot;
    32. shootItem = [[UIImageView alloc] initWithFrame:shootRect];
    33. [shootItem setImage:[UIImage imageNamed:@"crumpled_shoot.png"]];
    34. [self setShoot:shootItem];
    35. btnAniStarted = TRUE;
    36. [image addSubview:shootItem];
    37. }
    38. - (void) setHero:(UIImageView*)image{
    39. CGRect dragRect = CGRectMake(322.0f, 325.0f, 50.0, 110.0);
    40. heroHit = [[UIImageView alloc] initWithFrame:dragRect];
    41. //[heroHit setBackgroundColor:[UIColor redColor]];
    42. heroHit.alpha=0.5;
    43. [image addSubview:heroHit ];
    44. }
    45. - (void) startItems:(id)sender levelID:(int)levelID{
    46. intLevelID=levelID;
    47. [self setHero:sender];
    48. [self setCrumple:sender];
    49. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hst68 ()

  • Schmunzelnd - einmal... ok, zwei Mal laut Nachgedacht ;)

    Die Lösung:

    Quellcode

    1. - (void) checkCollison{
    2. if (!paused) {
    3. CGRect frame2 = self.heroHit.frame;
    4. CALayer *layer = shootItem.layer.presentationLayer;
    5. CGRect layerFrame = layer.frame;
    6. if (CGRectIntersectsRect(layerFrame, frame2)) {
    7. NSLog(@"Object wurde getroffen!");
    8. }
    9. }
    10. }
    Alles anzeigen