Предотвратить перекрытие двух SkspritenodesIOS

Программируем под IOS
Ответить
Anonymous
 Предотвратить перекрытие двух Skspritenodes

Сообщение Anonymous »

Я хочу воспроизвести Super-Mario для iOS, используя Swift и Spritekit. Я использую Skphysics-Bodies для имитации столкновений между игроком и окружающей средой. У игрока и всех объектов есть собственный Skphysicsbody (прямоугольник их размера). Но когда игрок прыгает против кирпича (сверху левого или верхнего справа), как этот, игрок застрянет в воздухе. И Skphysics-двигатель думает, что игрок находится на вершине среднего кирпича, потому что игрок немного находится внутри кирпича выше и падает на средний кирпич. Или как я могу это исправить? Если вам нужна дополнительная информация, чтобы ответить, пожалуйста, скажите мне!import SpriteKit

class Brick: SKSpriteNode {

let imgBrick = SKTexture(imageNamed: "Brick")

init(let xCoor: Float, let yCoor: Float) {
// position is a global variable which is 1334/3840
super.init(texture: imgBrick, color: UIColor.clearColor(), size: CGSize(width: 80*proportion, height: 80*proportion))
position = CGPoint(x:Int(xCoor*667)+Int(40*proportion), y:Int(375-(yCoor*375))-Int(40*proportion))
name = "Brick"
physicsBody = SKPhysicsBody(rectangleOfSize: self.size)
physicsBody?.affectedByGravity = false
physicsBody?.dynamic = false
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
< /code>
и мой класс игрока < /p>
import SpriteKit

class Mario: SKSpriteNode {

let atlas = SKTextureAtlas(named: "Mario")
var imgMario = [SKTexture]()
var action = SKAction()

init(let xCoor: Float, let yCoor: Float) {
for(var i = 1; i < 24; i++) {
imgMario.append(atlas.textureNamed("X\(i)"))
}

super.init(texture: imgMario[0], color: UIColor.clearColor(), size: CGSize(width: 120*proportion, height: 160*proportion))
position = CGPoint(x:Int(xCoor)+Int(60*proportion), y:Int(yCoor)-Int(90*proportion))
name = "Mario"
physicsBody = SKPhysicsBody(rectangleOfSize: self.size)
physicsBody?.allowsRotation = false

action = SKAction.repeatActionForever(SKAction.animateWithTextures(imgMario, timePerFrame: 0.03, resize: false, restore: true))
runAction(action, withKey: "walking")
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
< /code>
и какая -то часть моего класса уровня < /p>
class Level: SKScene, SKPhysicsContactDelegate {

var motionManager = CMMotionManager()

var mario = Mario(xCoor: 100, yCoor: 90)
var world = SKSpriteNode()

let MarioCategory: UInt32 = 0x1

Подробнее здесь: https://stackoverflow.com/questions/345 ... verlapping
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»