SpriteKit iOS، macOS، tvOS اور watchOS پر 2D گیمز تیار کرنے کے لیے Apple کا فریم ورک ہے۔ یہ گرافکس، فزکس، اینیمیشن اور آواز کے ساتھ کام کرنے کے لیے تیار اجزاء فراہم کرتا ہے، جس سے ڈیولپرز گیم پلے پر توجہ مرکوز کر سکتے ہیں۔ Apple WWDC (2025) کے مطابق، SpriteKit App Store میں 2 لاکھ سے زیادہ ایپلیکیشنز میں استعمال ہوتا ہے۔
اہم نکات
SpriteKit 2D گرافکس اور گیمنگ کا ایک فریم ورک ہے جو Apple SDK کا حصہ ہے۔ 2013 میں iOS 7 پر متعارف کرایا گیا، SpriteKit اسپرائٹ رینڈرنگ، اینیمیشن، فزکس، پارٹیکلز اور آواز کے ساتھ کام کرنے کے لیے ایک اعلیٰ سطحی API فراہم کرتا ہے۔ فریم ورک Xcode اور Interface Builder کے ساتھ مربوط ہے، جس سے گیم مناظر بنانا آسان ہو جاتا ہے۔
Unity جیسے گیم انجنوں کے برعکس، SpriteKit Apple پلیٹ فارمز کے لیے آپٹیمائزڈ ہے اور Metal API کے ذریعے ہارڈویئر ایکسلریشن استعمال کرتا ہے۔ یہ موبائل آلات پر کم بجلی کی کھپت اور پرانے iPhone ماڈلز پر بھی اعلیٰ کارکردگی کو یقینی بناتا ہے۔ Metal رینڈرنگ iOS 12 اور نئے ورژن والے تمام آلات پر دستیاب ہے۔
SpriteKit ایکو سسٹم میں GameplayKit (الگورتھم اور AI)، AVFoundation (ویڈیو اور آڈیو)، Core Image (فلٹرز) اور ARKit (augmented reality) کے ساتھ انضمام شامل ہے۔ Apple (2025) کے مطابق، SpriteKit A17 Pro چپ اور نئے ورژن والے آلات پر 8K تک ریزولوشن سپورٹ کرتا ہے، جو iPad Pro پر 120 FPS فراہم کرتا ہے۔
SpriteKit کا پہلا ورژن iPhone 5s کے ساتھ iOS 7 میں آیا۔ اس سے پہلے، ڈیولپرز Core Graphics یا Cocos2D جیسی تیسری پارٹی لائبریریاں استعمال کرتے تھے۔ SpriteKit 2.0 (iOS 10) نے Metal، شیڈر (.fsh فائلیں) اور بہتر پارٹیکل سسٹم کے لیے سپورٹ شامل کیا۔ SpriteKit 3.0 (iOS 17) نے مقامی Game Controller سپورٹ اور توسیع شدہ PhysicsKit صلاحیتیں متعارف کروائیں۔
iOS 18 (2024) کی ریلیز کے ساتھ، SpriteKit کو مکمل تھریڈ سیفٹی اور UIViewRepresentable کے ذریعے SwiftUI انضمام کے ساتھ Swift 6 سپورٹ ملا۔ اس نے SpriteKit کو نہ صرف گیمز کے لیے بلکہ عام ایپلیکیشنز کے اندر UI اینیمیشنز، انٹرایکٹو چارٹس اور ڈیٹا وژیولائزیشن کے لیے بھی استعمال کرنے کے قابل بنایا۔
SpriteKit آرکیٹیکچر منظر گراف پر بنایا گیا ہے۔ جڑ کا عنصر SKScene ہے، جس میں SKNode آبجیکٹ کا ایک درخت ہوتا ہے۔ ہر نوڈ میں ایک ٹرانسفارم (پوزیشن، گردش، پیمانہ) ہوتا ہے، اور چائلڈ نوڈ والدین کے ٹرانسفارم کو وراثت میں پاتے ہیں۔ یہ پیچیدہ درجہ بندی بنانا آسان بناتا ہے، جیسے منسلک ہتھیار والا کردار۔
SKScene جڑ نوڈ ہے جو گیم کے اپ ڈیٹ لوپ کو منظم کرتا ہے۔ update(_ currentTime:) طریقہ ہر فریم سے پہلے کال کیا جاتا ہے اور سیکنڈ میں موجودہ وقت وصول کرتا ہے۔ منظر کا سائز پوائنٹس میں سیٹ کیا جاتا ہے اور scaleMode کے ذریعے خود بخود اسکرین سائز میں اسکیل ہو جاتا ہے۔ دستیاب موڈز .aspectFill، .aspectFit، .fill اور .resizeFill ہیں۔
import SpriteKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
self.backgroundColor = SKColor.black
self.scaleMode = SKSceneScaleMode.aspectFill
let sprite = SKSpriteNode(imageNamed: "player")
sprite.position = CGPoint(x: 100, y: 100)
addChild(sprite)
}
override func update(_ currentTime: TimeInterval) {
// ہر فریم گیم لاجک
}
}
didMove(to view:) طریقہ ایک بار کال کیا جاتا ہے جب منظر SKView میں ظاہر ہوتا ہے۔ یہ ابتدائی اشیاء بنانے اور منظر کے پیرامیٹرز ترتیب دینے کے لیے استعمال ہوتا ہے۔ update طریقہ ہر فریم پر چلتا ہے اور حرکتوں کا حساب لگانے، تصادم چیک کرنے اور گیم کی حالت اپ ڈیٹ کرنے کے لیے استعمال ہوتا ہے۔
SKNode منظر گراف میں تمام اشیاء کے لیے بنیادی کلاس ہے۔ یہ بصری طور پر رینڈر نہیں ہوتا لیکن اس میں ایک ٹرانسفارم ہوتا ہے اور چائلڈ نوڈ ہو سکتے ہیں۔ اہم ذیلی کلاسز میں SKSpriteNode (تصویر)، SKLabelNode (متن)، SKShapeNode (شکلیں) اور SKEmitterNode (پارٹیکلز) شامل ہیں۔ ہر نوڈ کا childNode(withName:) کے ذریعے تلاش کے لیے ایک منفرد نام ہوتا ہے۔
SKShapeNode صوابدیدی شکلیں بنانے کی اجازت دیتا ہے: مستطیل، دائرے، لکیریں اور CGPath پر مبنی راستے۔ یہ تیار اسپرائٹ کے بغیر گیم آبجیکٹ کے پروٹوٹائپ کے لیے مفید ہے۔ پروڈکشن کے لیے، ٹیکسچر والے SKSpriteNode استعمال کرنے کی سفارش کی جاتی ہے، کیونکہ Core Graphics کے ذریعے شکل رینڈرنگ ہارڈویئر ٹیکسچر رینڈرنگ سے سست ہے۔
SpriteKit کوآرڈینیٹ سسٹم نیچے بائیں کونے میں ماخذ کے ساتھ بائیں ہاتھ کا کارٹیشین سسٹم استعمال کرتا ہے۔ نوڈ کی پوزیشن اپنے والدین کے نسبت CGPoint میں سیٹ کی جاتی ہے۔ zPosition پراپرٹی ڈرا آرڈر کا تعین کرتی ہے: زیادہ zPosition والے نوڈ کم قیمت والے نوڈ کے اوپر رینڈر ہوتے ہیں۔
SKView ایک UIView ہے جو SKScene کے مواد کو ظاہر کرتا ہے۔ یہ رینڈر لوپ، منظر کی منتقلی اور ڈیبگ معلومات کا انتظام کرتا ہے۔ showsFPS پراپرٹی فریم ریٹ ڈسپلے کو فعال کرتی ہے، showsNodeCount منظر میں نوڈ کی تعداد دکھاتی ہے، showsPhysics ڈیبگنگ کے لیے فزکس باڈی کو وزیولائز کرتی ہے۔
SwiftUI میں، SpriteKit SpriteView کے ذریعے ایمبیڈ ہوتا ہے — ایک ریپر جو اینیمیشن، توقف اور جسچر انضمام کو سپورٹ کرتا ہے۔ Apple (2025) کے مطابق، SpriteView کارکردگی کے نقصان کے بغیر UIView جیسا ہی Metal GPU رینڈرر استعمال کرتا ہے۔ یہ SwiftUI کے اندر SpriteKit اینیمیشن کے ساتھ ہائبرڈ انٹرفیس بنانے کی اجازت دیتا ہے۔
SpriteKit کا فزکس انجن کشش ثقل، تصادم، رگڑ اور بحالی کے سپورٹ کے ساتھ ٹھوس جسم سمیولیشن فراہم کرتا ہے۔ ہر SKSpriteNode کو physicsBody پراپرٹی کے ذریعے فزکس باڈی تفویض کی جا سکتی ہے۔ باڈی کی اقسام: .static (غیر متحرک)، .dynamic (قوتوں کے تحت متحرک) اور .kinematic (تصادم کے ساتھ دستی طور پر کنٹرول)۔
SKPhysicsBody نوڈ کی شکل اور طبعی خصوصیات کی وضاحت کرتا ہے۔ شکل مستطیل، گول یا CGPath پر مبنی صوابدیدی ہو سکتی ہے۔ ہر باڈی میں بٹ ماسک ہوتے ہیں: categoryBitMask، collisionBitMask اور contactBitMask، جو SKPhysicsContactDelegate کے ذریعے تصادم اور تصادم کی اطلاع کو کنٹرول کرتے ہیں۔
// اسپرائٹ فزکس کنفیگریشن
let player = SKSpriteNode(imageNamed: "ship")
player.physicsBody = SKPhysicsBody(rectangleOf: player.size)
player.physicsBody?.categoryBitMask = 1
player.physicsBody?.collisionBitMask = 2
player.physicsBody?.contactTestBitMask = 2
extension GameScene: SKPhysicsContactDelegate {
func didBegin(_ contact: SKPhysicsContact) {
// تصادم ہینڈلنگ
}
}
didBegin ڈیلیگیٹ طریقہ دو فزکس باڈیوں کے درمیان تصادم شروع ہونے پر کال کیا جاتا ہے۔ contact آبجیکٹ میں دونوں باڈی (bodyA، bodyB) اور رابطہ نقطہ (contactPoint) کے حوالہ جات ہوتے ہیں۔ بٹ ماسک کے ذریعے حسب ضرورت تصادم کی پرتیں مخصوص زمروں کے درمیان تصادم کا پتہ لگانے کے لیے استعمال ہوتی ہیں۔
SKAction اعلامیاتی اینیمیشن سسٹم ہے جو update طریقہ میں دستی انتظام کے بغیر نوڈ کو منتقل، گھمانے، اسکیل کرنے اور اوپیسیٹی تبدیل کرنے کی اجازت دیتا ہے۔ ایکشن ترتیب وار (sequence)، متوازی (group)، دہرائے جانے والے (repeatForever) یا انتظار (wait) ہو سکتے ہیں۔
دشمن NPC کے گشت اینیمیشن کی مثال:
// دشمن گشت اینیمیشن
let moveRight = SKAction.moveBy(
x: 200, y: 0, duration: 2.0
)
let moveLeft = SKAction.moveBy(
x: -200, y: 0, duration: 2.0
)
let wait = SKAction.wait(forDuration: 1.0)
let patrol = SKAction.sequence([moveRight, wait, moveLeft, wait])
enemy.run(SKAction.repeatForever(patrol))
SKAction سسٹم A14+ والے آلات پر کارکردگی میں کمی کے بغیر ایک ساتھ 1000 تک ایکشن کو سپورٹ کرتا ہے۔ ایکشن کسی بھی SKNode پر لاگو کیے جا سکتے ہیں، بشمول مکمل درجہ بندی۔ ترتیب ختم ہونے کے بعد کال بیک کے لیے ایک مکمل ہینڈلر دستیاب ہے۔
SKEmitterNode پارٹیکل اثرات بنانے کے لیے ایک خصوصی نوڈ ہے: دھواں، آگ، بارش اور دھماکے۔ ایمیٹر پیرامیٹرز Xcode میں .sks فائلوں کے ذریعے یا پروگراماتی طور پر سیٹ کیے جاتے ہیں۔ اہم پیرامیٹرز میں birthRate (پیداوار کی رفتار)، lifetime (پارٹیکل کی عمر)، speed (رفتار) اور alphaSpeed (دھندلاہٹ کی شرح) شامل ہیں۔
Apple (2024) کے مطابق، SKEmitterNode GPU کے لیے آپٹیمائزڈ ہے اور 60 FPS پر ایک ساتھ 10 ہزار تک پارٹیکل کو سپورٹ کرتا ہے۔ پارٹیکل ٹیکسچرڈ اور اینیمیٹڈ ہو سکتے ہیں۔ پیچیدہ اثرات کے لیے، مختلف پیرامیٹرز والے متعدد ایمیٹرز کو ایک دوسرے پر تہہ کرکے یکجا کرنے کی سفارش کی جاتی ہے۔
SpriteKit پر ڈیولپمنٹ کنٹرولر یا SwiftUI View میں SKView ترتیب دینے سے شروع ہوتی ہے۔ اس کے بعد، SKScene کا ایک ذیلی طبقہ بنایا جاتا ہے جو گیم کی دنیا کو بیان کرتا ہے۔ SpriteKit Xcode منظر ایڈیٹر (.sks فائلیں) کو سپورٹ کرتا ہے، جو کوڈ لکھے بغیر نوڈ کی بصری جگہ اور پراپرٹی کنفیگریشن کی اجازت دیتا ہے۔
SKTransition مناظر کے درمیان اینیمیشن کا انتظام کرتا ہے۔ دستیاب اقسام میں fade، moveIn، push، reveal، flip، doors اور crossFade شامل ہیں۔ منتقلی کی مدت سیکنڈ میں سیٹ کی جاتی ہے۔ منتقلیاں سمتاتی (بائیں، دائیں، اوپر، نیچے) ہو سکتی ہیں اور کنٹینر رنگ بھرنے کے ساتھ مل سکتی ہیں۔
// مناظر کے درمیان منتقلی
let newScene = GameScene(size: self.size)
let transition = SKTransition.push(
with: SKDirection.up, duration: 0.5
)
self.view?.presentScene(newScene, transition: transition)
presentScene(_:transition:) طریقہ اینیمیشن کے ساتھ موجودہ منظر کو نئے منظر سے بدل دیتا ہے۔ اسے کال کرنے سے پہلے، موجودہ منظر کو روکنے اور آوازیں بند کرنے کی سفارش کی جاتی ہے۔ پچھلے منظر پر واپس آنے کے لیے، الٹی منتقلی سمت کے ساتھ presentScene استعمال کیا جاتا ہے۔ Apple کے مطابق، push منتقلیاں iOS پر fade سے زیادہ قدرتی لگتی ہیں۔
SpriteKit میں، ان پٹ ہینڈلنگ SKScene طریقوں کو اوور رائڈ کرکے لاگو کی جاتی ہے: touchesBegan، touchesMoved، touchesEnded اور touchesCancelled۔ ہر طریقہ ٹچ کا ایک سیٹ (Set
گیم پیڈ سپورٹ کے لیے، SpriteKit GameController فریم ورک کے ذریعے GCController کے ساتھ ضم ہوتا ہے۔ iOS 18 نے فزیکل کنٹرولر کے بغیر گیمز کے لیے آن اسکرین ورچوئل کنٹرولر کا سپورٹ شامل کیا۔ Apple (2025) کے مطابق، 30% سے زیادہ SpriteKit گیمز معیاری API کے ذریعے گیم پیڈ کو سپورٹ کرتی ہیں۔
SKAudioNode منظر میں مقامی پوزیشننگ کے ساتھ آواز اور موسیقی چلانے کی سہولت فراہم کرتا ہے۔ آوازیں نوڈ سے منسلک ہوتی ہیں اور ان کے ساتھ چلتی ہیں۔ معاون فارمیٹس میں AAC، MP3، WAV اور ALAC شامل ہیں۔ پس منظر کی موسیقی کے لیے AVFoundation سے AVAudioPlayer استعمال کیا جاتا ہے؛ مختصر آواز کے اثرات کے لیے SKAction.playSoundFileNamed استعمال کیا جاتا ہے۔
آڈیو مکسر سسٹم آواز کے گروپوں کی آواز کو ایڈجسٹ کرنے کی اجازت دیتا ہے: موسیقی، اثرات، آواز۔ Apple (2024) کے مطابق، SpriteKit اضافی کوڈ کے بغیر مقامی آڈیو اثر پیدا کرتے ہوئے، منظر کیمرے کے فاصلے کی بنیاد پر خود بخود آواز کی آواز کو ایڈجسٹ کرتا ہے۔
SpriteKit آپٹیمائزیشن اسپرائٹ شیٹس (ٹیکسچر اٹلس) کے استعمال سے شروع ہوتی ہے۔ SKTextureAtlas متعدد اسپرائٹ کو ایک ٹیکسچر میں یکجا کرتا ہے، ڈرا کال کو کئی سو سے کم کرکے 1–2 کر دیتا ہے۔ Xcode پروجیکٹ بلڈ کے دوران امیج فولڈرز سے خود بخود اٹلس بناتا ہے۔
SKTextureAtlas ایک I/O آپریشن میں اٹلس سے تمام اسپرائٹ لوڈ کرتا ہے۔ Apple (2025) کے مطابق، اٹلس کا استعمال انفرادی ٹیکسچر لوڈ کرنے کے مقابلے میں منظر لوڈ کرنے کا وقت 60–70% کم کرتا ہے۔ اٹلس GPU پر کیش ہوتے ہیں اور منظر تبدیل کرنے پر دوبارہ لوڈ کرنے کی ضرورت نہیں ہوتی۔
SpriteKit میں خودکار بیچنگ ایک ہی ٹیکسچر والے SKSpriteNode کو ایک ڈرا کال میں یکجا کرتا ہے۔ زیادہ سے زیادہ کارکردگی کے لیے، فی منظر 10–15 سے زیادہ منفرد ٹیکسچر استعمال نہ کرنے کی سفارش کی جاتی ہے۔ WWDC 2024 کے مطابق، بیچ رینڈرنگ FPS میں کمی کے بغیر ایک ڈرا کال میں 500 اسپرائٹ تک پروسیس کرتی ہے۔
Xcode SpriteKit Debugger منظر گراف کا ریئل ٹائم بصری منظر فراہم کرتا ہے۔ ٹول نوڈ کی تعداد، ڈرا کال، FPS اور میموری کے استعمال کو ظاہر کرتا ہے۔ نوڈ کلاس کے مطابق فلٹر کرنا رکاوٹوں کی نشاندہی کرنے میں مدد کرتا ہے: مثال کے طور پر، SKShapeNode SKSpriteNode سے سست رینڈر ہوتا ہے۔
SpriteKit Profiler ٹیمپلیٹ کے ساتھ Instruments ہر نوڈ کے رینڈرنگ وقت کے بارے میں تفصیلی معلومات فراہم کرتا ہے۔ Apple (2025) کے مطابق، سب سے عام کارکردگی کے مسائل یہ ہیں: بہت زیادہ پارٹیکل (10 ہزار سے زیادہ)، SKPhysicsBody کے لیے پیچیدہ CGPath، اور بار بار نوڈ بنانا/حذف کرنا۔ آبجیکٹ پول کے ذریعے نوڈ کو دوبارہ استعمال کرنے کی سفارش کی جاتی ہے۔
SpriteKit ARKit ایپلیکیشنز کے لیے 2D اوورلے کے طور پر استعمال کیا جا سکتا ہے۔ ARSKView SKView کو بڑھاتا ہے اور خود بخود SpriteKit منظر کو ARKit کیمرے کے ساتھ مطابقت پذیر کرتا ہے۔ augmented reality میں اشیاء کو ARAnchor کے ذریعے حقیقی دنیا کے نسبت رکھے گئے اسپرائٹ کے طور پر پیش کیا جا سکتا ہے۔
Apple (2025) کے مطابق، ARSKView AR گیمز، معلوماتی اوورلیز اور انٹرایکٹو ہدایات بنانے کے لیے استعمال ہوتا ہے۔ مثال کے طور پر، SpriteKit اسپرائٹ کیمرہ جس چیز کی طرف اشارہ کر رہا ہے اس کے نام یا فرنیچر کے لیے اینیمیٹڈ اسمبلی ہدایات ظاہر کر سکتے ہیں۔ متحد Metal رینڈرر کی بدولت ARSKView کی کارکردگی SKView کے برابر ہے۔
اکثر پوچھے گئے سوالات
SpriteKit iOS، macOS، tvOS اور watchOS پر 2D گیمز اور انٹرایکٹو گرافکس بنانے کے لیے Apple کا فریم ورک ہے۔ یہ Metal کے ذریعے ہارڈویئر ایکسلریشن کے ساتھ عام گیمز، UI اینیمیشنز اور انٹرایکٹو وزیولائزیشن تیار کرنے کے لیے استعمال ہوتا ہے۔
اہم اقسام: SKSpriteNode (اسپرائٹ)، SKLabelNode (متن)، SKShapeNode (شکل)، SKEmitterNode (پارٹیکلز)، SKVideoNode (ویڈیو) اور SKAudioNode (آڈیو)۔ ہر نوڈ SKNode سے وراثت پاتا ہے اور ٹرانسفارم اور اینیمیشن کو سپورٹ کرتا ہے۔
SKAction اعلامیاتی اینیمیشن ہے جو update میں کوڈ کے بغیر خود بخود چلتی ہے۔ دستی update ہر فریم پر مکمل کنٹرول دیتا ہے۔ SKAction عام حرکات کے لیے آسان ہے، جبکہ update پیچیدہ فزکس اور پروسیجرل جنریشن کے لیے بہتر ہے۔
ٹیکسچر کو یکجا کرنے کے لیے SKTextureAtlas استعمال کریں، فی منظر منفرد ٹیکسچر کو 10–15 تک محدود کریں، اور آبجیکٹ پول کے ذریعے نوڈ کو دوبارہ استعمال کریں۔ Xcode SpriteKit Debugger سے پروفائل کریں اور پروڈکشن میں SKShapeNode سے بچیں۔
ہاں، SpriteView کے ذریعے — SpriteKit کے لیے SwiftUI ریپر۔ SpriteView اینیمیشن، توقف اور SwiftUI جسچر کے ساتھ انضمام کو سپورٹ کرتا ہے۔ یہ ایک عام ایپلیکیشن کے اندر گیم عناصر کے ساتھ ہائبرڈ انٹرفیس بنانے کی اجازت دیتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں