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
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
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.
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
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?
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.
Xcode updated, and when it first asked, allow Xcode to access to local files, I said No by mistake.
Now I don't know how to change that?
I just keep getting Could not open workspace file at
I can open the project using File-Open-Project. But I can't open from the Start Window.
My app needs a database and I would like to use SQLite.
Other than
using import SQLite3
and
adding libsqlite3.tbd in the Build Phase
Are there any other files I need to copy or import into my project?
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)
}
}
Am adding text to a Game Scene. Since I am new at this, I am curious about different screen sizes? Will a font size of 65 change in relationship to the SKSpriteNode it is a child of?
Is there method that detects and sets the proper font size for you, based on the size of its SKSpriteNode parent?
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
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)
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
}
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{
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
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.