Tetris benzeri bir oyunda, Şekiller'i aşağı taşımak için eylemleri kullanmaya çalışıyorum ve sonraki şekil çağrıldığında, önceki şeklin hareket etmesini engeller, böylece ikisi de hareketli. removeAllActions
ve removeActionForKey
'u bu konuda ve ayrıca SKNode Belgeleri'nde sorulan birçok başka soruyu kullanmaya çalıştım ama çalışmıyor gibi görünüyor. Kodumda actionForKey
'u test ettim ve diğer şekiller hala hareket halinde olsa bile, gerçekleştirilmekte olan herhangi bir eylemi yakalamadığı anlaşılıyor.SpriteKit'te hızlı hareketle Durdur eylemi
İlk olarak, biçimi oluşturan didMoveToView
içimdeki doMethod
işlevimi çağırın ve ardından aşağıdaki gibi hareket etmeye başladım. Bu, bir düğmeye bastığımda her yeni şekil oluşturulduğunda kontrol edebilmem için çağrılır. Diğer removeAllActions
ve removeActionForKey
dışarı yorumladı
func MoveBlocks(){
if(number_of_blocks > 1){
let newnum = number_of_blocks - 1
let KeyName = "MoveBlocks_"+String(newnum)
let ActName = actionForKey(KeyName) // returns nil
// removeAllActions()
// removeActionForKey(KeyName)
}
var Sprite = childNodeWithName("BOX_"+String(current_min))
var y_min = (Sprite?.position.y)
// calc y_min to stop when gets to bottom - not currently implemented correctly
for i in current_min...(current_max-1){
var CurrentSprite = childNodeWithName("BOX_"+String(i))
if(CurrentSprite?.position.y < y_min){
y_min = (CurrentSprite?.position.y)
}
}
if(y_min > CGFloat(BOX_WIDTH/2)){
for i in current_min...current_max {
var CurrentSprite = childNodeWithName("BOX_"+String(i))
//var current_pos = sprite_self?.position.y
//sprite_self?.position.y = (sprite_self?.position.y)! - CGFloat(BOX_WIDTH/2)
let moveAction = SKAction.moveBy(CGVector(dx: 0,dy: -60), duration: 0.001)
let pauseAction = SKAction.waitForDuration(0.999)
let runSequence = SKAction.sequence([moveAction, pauseAction])
var KeyName = "MoveBlocks_"+String(number_of_blocks)
CurrentSprite?.runAction(SKAction.repeatActionForever(runSequence), withKey: KeyName)
}
}
}
sadece Başlangıçta ne vardı göstermeye şöyle
func doMethod(){
if(true){
if(number_of_blocks != 1){
current_min = current_max + 1
}
// calculate points for shape
var box_d = createBox(self.size.width/2, yinit: 7*self.size.height/8)
// using box_d, make a SKNode with each calculated value
makeBox(box_d)
// move the blocks down
MoveBlocks()
number_of_blocks++
}
}
Sonra MoveBlocks
fonksiyonudur. Ayrıca, MoveBlocks
'un ilk biti sadece oradadır, böylece ilk şekil oluşturulduğunda, herhangi bir eylemin bulunmadığı gibi durmaya çalışmaz. Sonra ikinci, üçüncü ve benzeri için olacak.
İlk başta Eylem'i nasıl oluşturduğumla ilgili bir şey olduğunu hissediyorum, ancak emin değilim.
removeAllActions yalnızca sahneyi kaldırır, şu andaki grafiğiniz değil, spritelarda da kaldırmaları çağırmanız gerekir. "CurrentSprite? .removeAllActions" – Knight0fDragon
https://www.raywenderlich.com/42699/spritekit-tutorial-for-beginners – Knight0fDragon
Ah evet teşekkürler! “MoveBlocks()” ın sonunda olduğu gibi bir for döngüsünü uyguladım ve söylediklerini yapıp çalıştım. Teşekkürler! Object-c yerine swift ile yapılanlar dışında bunun gibi eğiticileriniz var mı? – MathCoder