官术网_书友最值得收藏!

Wiring up the sprite onTap events

Your games will often require the ability to run code when the player taps a specific sprite. I like to implement a system that includes all the sprites in your game so that you can add tap events to each sprite without building any additional structure. We have already implemented onTap methods in all of our classes that adopt the GameSprite protocol; we still need to wire up the scene to call these methods when the player taps the sprites.

Note

Before we move on, we need to remove the Core Motion code, since we will not be using it in the finished game. Once you finish exploring the Core Motion example, please remove it from the game by following the previous section's bullet points in reverse.

Implementing touchesBegan in the GameScene

SpriteKit calls our scene's touchesBegan function every time the screen is touched. We will read the location of the touch and determine the sprite node in that position. We can check whether the touched node adopts our GameSprite protocol. If it does, this means it must have an onTap function, which we can then invoke. Add the touchesBegan function before the GameScene class. I like to place it just after the didSimulatePhysics function:

override func touchesBegan(_ touches: Set<UITouch>, 
    with event: UIEvent?) { 
    for touch in (touches) { 
        // Find the location of the touch: 
        let location = touch.location(in: self) 
        // Locate the node at this location: 
        let nodeTouched = atPoint(location) 
        // Attempt to downcast the node to the GameSprite protocol 
        if let gameSprite = nodeTouched as? GameSprite { 
            // If this node adheres to GameSprite, call onTap: 
gameSprite.onTap() 
        } 
    } 
} 

That is all we need to do to wire up all of the onTap functions we have implemented on the game object classes we have made. Of course, all of these onTap functions are empty at the moment; we will now add some functionality to illustrate this effect.

Larger than life

Open your Player.swift file and locate the onTap function. Temporarily, we will expand the penguin to giant size when tapped to demonstrate that we have wired our onTap functions correctly. Add this code inside the penguin's onTap function:

print(" tapping on penguin")

Run the project and tap on the penguin. On the debug console, you will see the text getting printed out each time you tap on the penguin:

Larger than life

This example shows that our onTap functions work. You can remove the code you added to the Player class in the onTapfunction. We will keep the onTap wire-up code in GameScene so that we can use tap events later.

主站蜘蛛池模板: 唐海县| 县级市| 浦江县| 罗甸县| 富顺县| 化德县| 柳州市| 张家口市| 丹凤县| 涡阳县| 宣威市| 武穴市| 葫芦岛市| 岳阳市| 和顺县| 高州市| 石景山区| 方城县| 武强县| 临猗县| 荆州市| 卓尼县| 开化县| 云龙县| 西丰县| 瑞昌市| 防城港市| 彰化市| 方山县| 射阳县| 乌拉特后旗| 浦江县| 东港市| 霍林郭勒市| 缙云县| 九龙城区| 偏关县| 敖汉旗| 光山县| 漯河市| 茌平县|