Post

Replies

Boosts

Views

Activity

Looking for book recommendations for game development
New to Macs and still learning Swift. My first goal is a game so I actually am looking for TWO recommendations:Is there an advantage to Swift vs. Objective C when programming game apps?Can anyone recommend a decent book for beginners? I'm not a beginner, however my last heavy experience was with Perl, C, and the WindowsSDK. So am behind the times.Thank you
6
0
1.3k
Feb ’21
Did Xcode 12.4 get rid of "storyboards" by default?
Haven't touched Xcode since it upgraded to 12.4. Just started a new app, which I planned to create without storyboards. But the default files I am used to deleting or manipulating aren't there anymore. I don't even see AppDelegate.swift. So did Xcode 12.4 get rid of "storyboards" by default? And if so, where do I go to relearn how to start? Thanks.
5
0
3.3k
Feb ’21
Problem again with user-defined setting
This was something I needed so much help with in this post https://developer.apple.com/forums/thread/666997 I want to add a user defined setting. As I did (from the answer in the previous post, I made sure I was adding in SWIFTACTIVECOMPILATION_CONDITIONS I added MYDEBUG01, which does not work. This is in Xcode 12.4 I put up both projects in a picture, the one where it does work is the bottom one, MYSCENES. This was in Xcode 11.x The screens do look a little different, but can't figure out where my error is. Here is the screenshot http:// 98.7.37.117/index.html
2
0
1.8k
Feb ’21
How can I execute animations for multiple SKSprintNodes at once?
I already know how to run multiple animations on the same SKSpriteNode at once: createPaths() let myIcon1 = MyIcon(wIcon: "screen", iSize: iSize) let move = SKAction.follow(iconPath[0], asOffset: false, orientToPath: false, duration: 1) let shrink = SKAction.resize(byWidth: -iSize.width/2, height: -iSize.width/2, duration: 1) let blur = SKAction.fadeAlpha(to: 0.6, duration: 1) let group = SKAction.group([shrink, move, blur]) myIcon1.run(group) But I have two more icons I would like to animate at the same time. Granted, with just 3 icons total I can't see any lag if I do something like this: myIcon1.run(group1) myIcon2.run(group2) myIcon3.run(group3) But surely there is a proper way to do this?
1
0
577
Feb ’21
How can I have an SKSpriteNode follow the same path back and forth?
My code is compartmentalized over many files, so I hope I can describe this easily. I have a path that goes from point A to point B I place an SKSpriteNode at point A and execute: iconPath[0] = the path SKAction.follow(iconPath[0], asOffset: false, orientToPath: false, duration: 1)) I execute that SKACtion and as I expected, my SKNode goes from point A to point B. Fine. I'm not sure how to reverse it, I assumed from the dox that calling that same SKAction as is, would make the SKNode go from point B to A.
2
0
657
Feb ’21
Having strange trouble with touchesMoved, need help.
Am trying to make a game, where I drag gems around. The hierarchy is: GameScene (this is the view controller) gemBase, which holds the gems (light grey) SKSpriteNode gems SKSpriteNode The gems are children of gemBase, which is a child of GameScene. When the gemBase is at 0,0 everything works fine when I drag the gems. They are in the same place I am touching the screen. But I want to offer a left-handed feature, where I offset the gemBase to the rightsize of the screen. All gems automatically move with the base so I don't need to recalculate their positions. But then, when I try to move the gems, they are offset to the right of where I am touching the screen. They are offset by as much as I move the gemBase. Below is my only code where I handle touchesMoved (in GameScene) If you're having problems visualizing what I am describing, the screen shot is at: http: // 98.7.37.117/ss.gif Do I have to convert the touch.location?     override func touchesMoved(_ touches: SetUITouch, with event: UIEvent?){         guard touches.first != nil else { return }         if toggleHigh {highliteGem(theGem: myGems[0], clearAll: true)}         if let touch = touches.first, let node = myGV.currentGem, node.isMoving == true {             let touchLocation = touch.location(in: self)             node.moved    = true             node.position = touchLocation             node.isMoving = true             node.inSlot = false             //addTrailToTwinkle(theNode: node)         }     }
8
0
880
May ’21
How can I access an array in one of my classes?
myGV is a structure where I store a handful of global variables. The following are all sub-classes of SKSpriteNode: I have a class called guessingBar which holds 6 guessSlots. The former class has an array of the guessSlots for me to loop through. I just don't know the syntax of how to access the array. myGV holds multiple variables, so the SKSpriteNode guessBar can be found at: myGV.guessBar I expected to be able to read the array with: myGV.guessBar.guessSlots[x] but as you can see from the debugger screenshot, I cannot. In the screenshot you can see that everything is initialized. Am I missing some silly typo, or is the syntax escaping me? http: //98.7.37.117/s.png
3
0
618
Jun ’21
Is there a way to translate touches to screen coordinates
As you can see in the last two lines of the code below, I specify a specific SKSpriteNode to get the correct (or is it, adjusted?) touch coordinates. The last line is just left in there to compare while I am debugging. I was curious if there was already a method in Swift that translates any coordinates handed to it into physical screen coordinates? It would just be easier than having to first find out: Is this item that I am tracking, owned by the main GameScene, or a SKSpriteNode that has been placed somewhere other than 0,0 on the GameScene? override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {         super.touchesEnded(touches , with:event)         var delta = CGPoint(x: 0, y: 0)         guard touches.first != nil else { return }         if let touch = touches.first,            let node = myGV.currentGem,            node.isMoving == true {             let touchLocation = touch.location(in: myGV.guessBar!)             let touchLocation2 = touch.location(in: self)
1
0
820
Jun ’21
How can I return a nil in Swift
I have a subclass of SKSpriteNode called MyGem. There are multiple instances of this class at runtime. They are all in an array of MyGems. At a specific point I would like to find out which MyGem is twinkling. The problem I am running into is if no MyGem is twinkling. What do I return? I can't return a nil. 'nil' is incompatible with return type 'MyGem' So what do I return? I thought of returning the index number of the MyGem in the array class, and then passing -1 if none were twinkling. But that seems kludgy. func getHighGem() -> MyGem {    for gem in myGems {     if gem.twinkling == true {     return gem       }    }     return nil //this line causes the IDE error }
1
0
3.7k
Jun ’21
Will casting "as?" fail if not the correct type?
I know this is a silly question, but I just want to be safe. I have multiple subclasses of SKSpriteNode in my app. In touchesBegan I am looking for a specific type, MyPeg. I just want to make sure that the code below fails if the node is not a MyPeg. I have this fear that if another of my subclasses is the same size, or too similar, or even has the same variables that I might get a positive. override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){ super.touchesBegan(touches , with:event) guard let touch = touches.first else { return } let location = touch.location(in: self) let touchedNodes = self.nodes(at: location) for theNode in touchedNodes{ if let node = theNode as? MyPeg{
2
0
469
Jul ’21
Can I get an subclass's property from a function call that returns said subclass?
While debugging I would like to get a specific subclass's property. So far I can do this: if let myPeg = getTargetSlot(node: node, location touchLocation){           print (myPeg.index)             } Is it possible to write it in one line? Something like this? print ("\(getTargetSlot(node: node, location touchLocation).index") Because if there is a way, I cannot figure out the syntax. Thanks
1
0
442
Aug ’21
Why am I getting touchesCanceled instead of touchesEnded?
I am using debug labels so I know when I get any touchesBegan, touchesMoving, touchesEnded, and touchesCanceled. I get everything I expect, touchesBegan, touchesMoved, and touchesEnded. However, it would appear that if I barely, just barely move an SKSPriteNode, I get a touchesCanceled instead of touchesEnded. Even thought the call right before is touchesMoved. Is this as intended? Is there some threshold you have to reach to get an ended instead of a canceled? And if so, can I see and change it? Thanks More than glad to put my code, tho not sure how that would change anything.
1
0
672
Aug ’21