wie kann ich Objekte respawnen lassen

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

  • wie kann ich Objekte respawnen lassen

    Hallo ich tu derzeit für ein Schulprojekt ein spiel programmieren.
    Ich komme aber leider nicht weiter;( es hängt das die Objekte nicht respawnen:

    Also Es ist auf landscape eingestellt die Objekte sollen von rechts nach links erscheinen, die Objekte sollen physische Eigenschaften haben also man soll drauf springen können.

    ICH HOFFE IHR KÖNNT MIR HELFEN. Bin leider noch ein Anfänger.

    Habe es so gut wie es geht ohne Rechtschreibfehler geschrieben bin erst seit kurzen nach Deutschland gezogen.

    hier der code





    Quellcode

    1. ​#import "MyScene.h"
    2. @implementation MyScene
    3. - (void)spawnwolke {
    4. // Create sprite
    5. SKSpriteNode * spawnwolke = [SKSpriteNode spriteNodeWithImageNamed:@"wolke.png"];
    6. // Determine where to spawn the monster along the Y axis
    7. int minY = spawnwolke.size.height / 2;
    8. int maxY = self.frame.size.height - wolke.size.height / 2;
    9. int rangeY = maxY - minY;
    10. int actualY = (arc4random() % rangeY) + minY;
    11. // Create the monster slightly off-screen along the right edge,
    12. // and along a random position along the Y axis as calculated above
    13. spawnwolke.position = CGPointMake(self.frame.size.width + spawnwolke.size.width/2, actualY);
    14. [self addChild:spawnwolke];
    15. [spwolke addObject:spwolke];
    16. for (int i = 0; i < [spwolke count]; i++) {
    17. SKSpriteNode * sprite = [spwolke objectAtIndex:i];
    18. sprite.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sprite.frame.size];
    19. sprite.physicsBody.usesPreciseCollisionDetection = YES;
    20. sprite.physicsBody.affectedByGravity = NO;
    21. sprite.physicsBody.mass = 1000.0;
    22. };
    23. };
    24. -(id)initWithSize:(CGSize)size {
    25. if (self = [super initWithSize:size]) {
    26. /* Setup your scene here */
    27. taka = [SKSpriteNode spriteNodeWithImageNamed:@"Tuka.png"];
    28. taka.position = CGPointMake(self.frame.size.width/7, self.frame.size.height/1.8);
    29. taka.size = CGSizeMake(35, 30);
    30. taka.zPosition = 3;
    31. taka.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:taka.frame.size];
    32. taka.physicsBody.usesPreciseCollisionDetection = YES;
    33. taka.physicsBody.mass = 0.3;
    34. taka.physicsBody.affectedByGravity = NO;
    35. taka.physicsBody.dynamic = YES;
    36. [self addChild:taka];
    37. takaland = [SKSpriteNode spriteNodeWithImageNamed:@"tukland.png"];
    38. takaland.position = CGPointMake(160, 284);
    39. takaland.size = CGSizeMake(self.frame.size.width/1, self.frame.size.height/4.3);
    40. [self addChild:takaland];
    41. wolke = [SKSpriteNode spriteNodeWithImageNamed:@"wolke.png"];
    42. wolke.position = CGPointMake(self.frame.size.width/5, self.frame.size.height/2.5);
    43. wolke.size = CGSizeMake(100, 50);
    44. wolke.zPosition = 3;
    45. wolke.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:wolke.frame.size];
    46. wolke.physicsBody.usesPreciseCollisionDetection = YES;
    47. wolke.physicsBody.mass = 0;
    48. wolke.physicsBody.affectedByGravity = YES;
    49. wolke.physicsBody.dynamic = NO;
    50. [self addChild:wolke];
    51. wolke = [SKSpriteNode spriteNodeWithImageNamed:@"wolke.png"];
    52. wolke.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2.5);
    53. wolke.size = CGSizeMake(100, 50);
    54. wolke.zPosition = 3;
    55. wolke.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:wolke.frame.size];
    56. wolke.physicsBody.usesPreciseCollisionDetection = YES;
    57. wolke.physicsBody.mass = 0;
    58. wolke.physicsBody.affectedByGravity = YES;
    59. wolke.physicsBody.dynamic = NO;
    60. [self addChild:wolke];
    61. [self spawnwolke];
    62. timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(spawnwolke) userInfo:nil repeats:YES];
    63. firstTouch = YES;
    64. }
    65. return self;
    66. }
    67. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    68. [taka.physicsBody applyImpulse:CGVectorMake(10.00,60)];
    69. if (firstTouch == YES); {
    70. firstTouch = NO;
    71. taka.physicsBody.affectedByGravity = YES;
    72. }
    73. /* Called when a touch begins */
    74. };
    75. -(void)update:(CFTimeInterval)currentTime {
    76. /* Called before each frame is rendered */
    77. }
    78. @end
    Alles anzeigen

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

  • Meinst du wie du das Objekt Wolke bewegen kannst?
    Denn spawnen sollten die Wolken ja permanent, da alle zwei Sekunden der Timer feuert.

    Die Zeile sieht komisch aus:
    [spwolke addObject:spwolke];

    Ist spwolke zufällig ein Array (dann hilft es das Array auch so zu benennen)?
    Auch die For-Schleife erschließt sich mir nicht. Alle zwei Sekunden rufst du spawnwolke auf und durchläufst dann alle bisher erzeugten Wolken und erstelltet neue Bodys für sie - warum?

    Vielleicht beschreibst du noch mal etwas genauer was du tun möchtest und was davon noch nicht klappt.
  • Quellcode

    1. ​#import <SpriteKit/SpriteKit.h>
    2. @interface MyScene : SKScene {
    3. SKSpriteNode *taka;
    4. SKSpriteNode *takaland;
    5. SKSpriteNode *wolke;
    6. NSTimer *timer;
    7. BOOL firstTouch;
    8. NSMutableArray* spwolke;
    9. };
    10. - (void) spawnwolke;
    11. @end
    Alles anzeigen



    also ich möchte das die Wolken von rechts nach links sich bewegen in unterschiedlichen höhen. (wie bei einem Fließband )

    ja spwolke ist ein arrey.

    leider weis ich nicht genau was du meinst mit der Schleife.

    DANKE FÜR DIE SCHNELLE ANTWORT.
  • Eine Schleife ist zum Beispiel das hier:

    Quellcode

    1. for (int i = 0; i < [spwolke count]; i++) {
    2. }


    Was du in der Schleife machst ist nicht sinnvoll.

    Was glaubst du macht diese Zeile: [spwolke addObject:spwolke]; ?

    Kennst du schon SKAction? Das könnte dir helfen.

    Und zu guter letzt schaust du dir arc4random an, damit solltest du die Wolken in unterschiedlichen Höhen erzeugen können.
  • vielen dank also ich hab es geschafft das die Wolke bei jeden Start sich in unterschiedlich Positionen begeben
    leider befinden sie sich nicht immer im spiel Feld (gibt es eine Möglichkeit das spawn gebiet einzustellen) ?

    leider bewegen sich die Wolken immer noch nicht von rechts nach links
  • Ich habe es geschafft das die Wolke sich bewegt aber sie stürzt senkrecht ab und die wolke spawnt nur einmal und nicht wie ich wollte jede Sekunde.
    ja ich hab SKAction Gelesen dadurch konnte ich die wolke zu bewegen bringen.

    ich wollte es aber sie das die Wolken von rechts nach links fliegen aber grade nur in unterschiedlichen höhen.

    ich hab aber noch ein Problem mit den Wolken mein Spieler also Char kann nicht direkt auf die Wolke drauf es sieht so aus als ob die Wolke ein unsichtbares Feld hat sodass es aussieht als ob er drauf schweben würde.

    Quellcode

    1. #import "MyScene.h"
    2. @implementation MyScene
    3. - (void)spawnwolke {
    4. int random = (arc4random() % (int)self.frame.size.height-10)+40;
    5. SKSpriteNode *upperwolke = [SKSpriteNode spriteNodeWithImageNamed:@"wolke"];
    6. upperwolke.size = CGSizeMake(150, 50);
    7. upperwolke.position = CGPointMake(250, random);
    8. upperwolke.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:wolke.frame.size];
    9. upperwolke.physicsBody.mass = 10000;
    10. upperwolke.physicsBody.affectedByGravity = NO;
    11. upperwolke.physicsBody.dynamic = NO;
    12. [self addChild:upperwolke];
    13. [spwolke addObject:upperwolke];
    14. for (int i = 0; i < [spwolke count]; i++) {
    15. SKSpriteNode *sprite = [spwolke objectAtIndex:i];
    16. sprite.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sprite.frame.size];
    17. sprite.physicsBody.usesPreciseCollisionDetection = YES;
    18. sprite.physicsBody.affectedByGravity = NO;
    19. sprite.physicsBody.mass = 1000.0;
    20. sprite.name = [NSString stringWithFormat:@"beforeTuka"];
    21. };
    22. };
    23. -(id)initWithSize:(CGSize)size {
    24. if (self = [super initWithSize:size]) {
    25. /* Setup your scene here */
    26. spwolke = [[NSMutableArray alloc]init];
    27. taka = [SKSpriteNode spriteNodeWithImageNamed:@"Tuka.png"];
    28. taka.position = CGPointMake(self.frame.size.width/7, self.frame.size.height/1.8);
    29. taka.size = CGSizeMake(35, 30);
    30. taka.zPosition = 3;
    31. taka.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:taka.frame.size];
    32. taka.physicsBody.usesPreciseCollisionDetection = NO;
    33. taka.physicsBody.mass = 0.3;
    34. taka.physicsBody.affectedByGravity = YES;
    35. taka.physicsBody.dynamic = YES;
    36. [self addChild:taka];
    37. takaland = [SKSpriteNode spriteNodeWithImageNamed:@"tukland.png"];
    38. takaland.position = CGPointMake(160, 284);
    39. takaland.size = CGSizeMake(self.frame.size.width/1, self.frame.size.height/4.3);
    40. [self addChild:takaland];
    41. wolke = [SKSpriteNode spriteNodeWithImageNamed:@"wolke.png"];
    42. wolke.position = CGPointMake(self.frame.size.width/5, self.frame.size.height/2.5);
    43. wolke.size = CGSizeMake(100, 50);
    44. wolke.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:wolke.frame.size];
    45. wolke.physicsBody.usesPreciseCollisionDetection = YES;
    46. wolke.physicsBody.mass = 0;
    47. wolke.physicsBody.affectedByGravity = YES;
    48. wolke.physicsBody.dynamic = NO;
    49. [self addChild:wolke];
    50. wolke = [SKSpriteNode spriteNodeWithImageNamed:@"wolke.png"];
    51. wolke.position = CGPointMake(self.frame.size.width/1.5, self.frame.size.height/2.5);
    52. wolke.size = CGSizeMake(100, 50);
    53. wolke.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:wolke.frame.size];
    54. wolke.physicsBody.usesPreciseCollisionDetection = YES;
    55. wolke.physicsBody.mass = 0;
    56. wolke.physicsBody.affectedByGravity = YES;
    57. wolke.physicsBody.dynamic = NO;
    58. [self addChild:wolke];
    59. [self spawnwolke];
    60. timer = [NSTimer timerWithTimeInterval:1.5 target:self selector:@selector(spawnwolke) userInfo:nil repeats:YES];
    61. firstTouch = YES;
    62. };
    63. return self;
    64. }
    65. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    66. [taka.physicsBody applyImpulse:CGVectorMake(09.00,60)];
    67. if (firstTouch == YES); {
    68. firstTouch = NO;
    69. taka.physicsBody.affectedByGravity = YES;
    70. };
    71. /* Called when a touch begins */
    72. };
    73. -(void)update:(CFTimeInterval)currentTime {
    74. for (int i = 0; i < [spwolke count]; i++) {
    75. SKSpriteNode * sprite = [spwolke objectAtIndex:i];
    76. sprite.position =CGPointMake(sprite.position.x-3, sprite.position.x);
    77. };
    78. }; /* Called before each frame is rendered */
    79. @end
    Alles anzeigen
    1. ich seh keine SKAction in deinem Code (ja mit update kann man das auch lösen, SKAction ist mMn eleganter)
    2. in spawnwolke ist noch immer diese unsägliche For Schleife auf die ich bereits mehrfach hingewiesen habe - was denkst du was die macht?
    3. natürlich geht die Wolke nach unten: sprite.position =CGPointMake(sprite.position.x-3, sprite.position.x);
  • Quellcode

    1. ​for (int i = 0; i < [spwolke count]; i++) {
    2. SKSpriteNode *sprite = [spwolke objectAtIndex:i];
    3. sprite.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sprite.frame.size];
    4. sprite.physicsBody.usesPreciseCollisionDetection = YES;
    5. sprite.physicsBody.affectedByGravity = NO;
    6. sprite.physicsBody.mass = 1000.0;
    Alles anzeigen


    ich dachte das ich so das Objekt das spawnen soll die physischen Eigenschaften dazu tu ?

    wie würdest du den das machen ?

    weist du wie ich das mit diesem "unsichtbaren Feld" beheben kann

    Danke sehr für die schnelle Antwort