Ich arbeite an einem Projekt und was ich erreichen muss, ist eine zufällige Curl-Linie zu generieren. An diesem Punkt habe ich bereits eine Linie, die zufällig erzeugt wird, aber es ist nicht Curl. Ich lasse alle 0,5 Sekunden Punkte an verschiedenen x-Positionen spawnen und verbinde diese Punkte mit Bezier. Alles funktioniert perfekt, außer dass es nicht Curl ist. Auf dem Bild unten wird gezeigt auf 1) Wie ich es jetzt habe und auf 2) Wie ich es wohl machen soll. Irgendwelche Ideen, wie ich das machen kann? Ich verwende SpriteKit - Objective C SpriteKit Generieren zufällige Curl Linie
7
A
Antwort
7
Im Grunde, was Sie eine A Bézier (parametrisch) Kurve sind control points machen und Randomisierung müssen.
Nachdem Sie die große Antwort lesen und mit Begriffen vertraut machen, können Sie dieses Beispiel ausprobieren können (Ich gehe davon aus, dass Ihre Szene und Ansichtsgröße richtig eingestellt sind):
GameScene.m
#import "GameScene.h"
@implementation GameScene
-(void)didMoveToView:(SKView *)view {
}
-(NSInteger)randomNumberBetween:(NSInteger)from to:(NSInteger)to {
return (int)from + arc4random() % (to-from+1);
}
- (CGMutablePathRef)generatePath
{
CGMutablePathRef path = CGPathCreateMutable();
CGPoint p0 = CGPointMake(CGRectGetMidX(self.frame),self.scene.size.height-20.0f); //starting point just little below the upper edge of the screen
CGPathMoveToPoint(path, nil, p0.x, p0.y);
CGPoint p1 =
CGPointMake([self randomNumberBetween:150 to:300], self.scene.size.height- [self randomNumberBetween:150 to:300]);
CGPoint p2 = CGPointMake([self randomNumberBetween:150 to:300],[self randomNumberBetween:150 to:300]);
CGPoint p3 = CGPointMake(CGRectGetMidX(self.frame),0 + 20.0f); //ending point, just little above the bottom edge of the screen
CGFloat v = 0.3;
CGFloat cp1x = p1.x+v * (p1.x-p0.x);
CGFloat cp1y = p1.y+v * (p1.y-p0.y);
CGFloat cp2x = p2.x-v * (p3.x-p2.x);
CGFloat cp2y = p2.y-v * (p3.y-p2.y);
CGPathAddCurveToPoint(path,nil,cp1x,cp1y,cp2x,cp2y,p3.x,p3.y);
/*Debug - not needed*/
SKSpriteNode *sp0 = [SKSpriteNode spriteNodeWithColor:[SKColor yellowColor] size:CGSizeMake(5.0f,5.0f)];
sp0.zPosition = 5;
sp0.position = p0;
SKLabelNode *lp0 = [SKLabelNode labelNodeWithFontNamed:@"ArialMT"];
lp0.fontColor = [SKColor whiteColor];
lp0.fontSize = 20.0f;
lp0.text = @"p0";
lp0.position = CGPointMake(0.0f,-20.0f);
[sp0 addChild:lp0];
[self addChild:sp0];
SKSpriteNode *sp1 = [SKSpriteNode spriteNodeWithColor:[SKColor yellowColor] size:CGSizeMake(5.0f,5.0f)];
sp1.zPosition = 5;
sp1.position = p1;
SKLabelNode *lp1 = [SKLabelNode labelNodeWithFontNamed:@"ArialMT"];
lp1.fontColor = [SKColor whiteColor];
lp1.fontSize = 20.0f;
lp1.position = CGPointMake(0.0f,15.0f);
lp1.text = @"p1";
[sp1 addChild:lp1];
[self addChild:sp1];
SKSpriteNode *sp2 = [SKSpriteNode spriteNodeWithColor:[SKColor yellowColor] size:CGSizeMake(5.0f,5.0f)];
sp2.zPosition = 5;
sp2.position = p2;
SKLabelNode *lp2 = [SKLabelNode labelNodeWithFontNamed:@"ArialMT"];
lp2.fontColor = [SKColor whiteColor];
lp2.fontSize = 20.0f;
lp2.position = CGPointMake(0.0f,15.0f);
lp2.text = @"p2";
[sp2 addChild:lp2];
[self addChild:sp2];
SKSpriteNode *sp3 = [SKSpriteNode spriteNodeWithColor:[SKColor yellowColor] size:CGSizeMake(5.0f,5.0f)];
sp3.zPosition = 5;
sp3.position = p3;
SKLabelNode *lp3 = [SKLabelNode labelNodeWithFontNamed:@"ArialMT"];
lp3.fontColor = [SKColor whiteColor];
lp3.fontSize = 20.0f;
lp3.position = CGPointMake(0.0f,15.0f);
lp3.text = @"p3";
[sp3 addChild:lp3];
[self addChild:sp3];
SKShapeNode *p0p1 = [SKShapeNode node];
p0p1.zPosition = 2;
CGMutablePathRef path1 = CGPathCreateMutable();
CGPathMoveToPoint(path1, NULL, p0.x, p0.y);
CGPathAddLineToPoint(path1, NULL, p1.x, p1.y);
p0p1.path = path1;
[p0p1 setStrokeColor:[UIColor greenColor]];
[self addChild:p0p1];
SKShapeNode *p2p3 = [SKShapeNode node];
p2p3.zPosition = 2;
CGMutablePathRef path2 = CGPathCreateMutable();
CGPathMoveToPoint(path2, NULL, p2.x, p2.y);
CGPathAddLineToPoint(path2, NULL, p3.x, p3.y);
p2p3.path = path2;
[p2p3 setStrokeColor:[UIColor greenColor]];
[self addChild:p2p3];
return path;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self removeAllChildren];
SKShapeNode *yourline = [SKShapeNode node];
yourline.zPosition = 1;
yourline.path = [self generatePath];
[yourline setLineWidth:5];
[yourline setStrokeColor:[SKColor redColor]];
[self addChild:yourline];
}
Der größte Teil dieses Codes wird für das visuelle Debugging verwendet und wird nicht benötigt, um die Kurve zu randomisieren. Der wichtige Teil ist der erste Teil der Methode generatePath. Hier ist das Ergebnis:
Verwandte Themen
- 1. zufällige Grafik ungerichtet generieren
- 2. Linie mit SpriteKit zeichnen und Kollision erkennen
- 3. Generieren cURL Befehl von swagger
- 4. Generieren zufällige Zeichenwerte ohne Vorzeichen in C++
- 5. Generieren Sie zufällige RSA-Schlüssel mit RSACryptoServiceProvider
- 6. generieren zufällige Querystring auf Skript src Pfad
- 7. Generieren zufällige Korrelationsmatrix mit gegebener durchschnittlicher Korrelation
- 8. Generieren Sie zufällige SQL Server 2008-Zeittestdaten
- 9. Zufällige Aufzählung in C# 2.0 generieren
- 10. Generieren zufällige Farbe Hex in Objective-C?
- 11. Generieren zufällige Breite und longitutde in MySQL
- 12. generieren zufällige doppelte Zahlen in C++
- 13. Generieren zufällige UTF-8-Zeichenfolge in Python
- 14. Generieren Sie zufällige niederländische IBAN-Nummern
- 15. zufällige Zeichenfolge in PHP für Dateiname generieren
- 16. Erstellen Sie eine Linie mit zwei CGPoints SpriteKit Swift
- 17. Ist es möglich, eine Linie mit SpriteKit animiert zu zeichnen?
- 18. Erstellen einer Zufallszahl in SpriteKit
- 19. Generieren cURL-Ausgabe von Alamofire-Anfrage?
- 20. Pseudo-zufällige Ganzzahlen aus einem sich ändernden Intervall effizient generieren
- 21. Generieren Sie eine zufällige Zeichenfolge basierend auf Regex?
- 22. Generieren Sie zufällige linear unabhängige Polynome auf MATLAB
- 23. So generieren Sie zufällige Daten in SQL Server
- 24. Wie zufällige Slug aus Word-Liste zu generieren
- 25. Wie generieren zufällige iOS User Events mit Automatisierung?
- 26. Generieren zufällige korrelierte x und y Punkte mit Numpy
- 27. Schnellste Möglichkeit, eine Milliarde zufällige Doppel in Haskell zu generieren
- 28. generieren zufällige Datumsbereiche, wo Bereichsgröße von diskreter Verteilung entschieden wird
- 29. So generieren Sie zufällige 64-Bit-Ints mit Boost zufällig
- 30. Generieren Sie zufällige Hex-Farbwerte in Oracle SQL-Datenbank
Vielen Dank! Wirklich hilfreich ! –