¹ýÈ¥¼¸ÄêÖУ¬Òƶ¯Ó¦ÓÃÏñ·ç±©Ò»Ñùϯ¾íÊÀ½ç£¬¸Ä±äÁËÎÒÃǵÄÍøÉϹ¤×÷¡¢ÓéÀÖ·½Ê½¡£ºÜ¶àÒÆ¶¯Ó¦Óÿª·¢¼¼ÊõÓ¦Ô˶øÉú£¬¶øÒƶ¯Ò²¿ªÊ¼µÃµ½¿ª·¢¹ý³ÌÖØÊÓ¡£¾¡¹ÜÒÆ¶¯ÒѾ¿´ËÆÎÞËù²»ÔÚ£¬µ«Î´À´²Å¸Õ¸Õ¿ªÊ¼¡£ÐÂÒ»´úµÄÒÆ¶¯É豸£¬ºÃ±È¿É´©´÷É豸£¬ºÃ±ÈÎïÁªÍøµÄÐíÐí¶à¶àÒÆ¶¯¹¹¼þ£¬¾ÍÔÚÎÒÃÇÃæÇ°¡£ÎÒÃǻᷢÏÖ£ºÓÃÓÚÊý¾ÝչʾºÍÃüÁî½ÓÊÕµÄÓû§½çÃæ²»¶ÏµØÍƳ³öУ»Ô½À´Ô½¶àµÄ¹«Ë¾Õ¾ÔÚÕæÕýµÄÒÆ¶¯À˳±Ö®áÛ¡£Õâ»áÔÚδÀ´¼¸ÄêÖÐÓ°ÏìÈí¼þµÄÉè¼Æ¡¢¿ª·¢¡¢²âÊÔ·½Ê½¡£
InfoQµÄÕâÆªÎÄÕÂÊÇ¿ìËÙ±ä¸ïµÄÒÆ¶¯¼¼ÊõϵÁеÄÒ»²¿·Ö¡£Äã¿ÉÒÔÔÚÕâÀï¶©ÔĸÃϵÁеÄÐÂÎÄÕÂ֪ͨ¡£
½ñÄê£¬Ëæ×ÅSwift±à³ÌÓïÑÔ¼°Æä1.0°æµÄ·¢²¼£¬Æ»¹ûÔÊÐíÏòAppStoreÌá½»ÓÃSwift¿ª·¢µÄiOSÓ¦Óã¬ÎªiOS±àдӦÓôÓδÈç´Ë¼òµ¥¡£ÕâÆªÎÄÕÂչʾÁËÓÃSwift´´½¨iOSÓ¦ÓõÄÈ«¹ý³Ì£¬ÒÔ¼°ÈçºÎͨ¹ýSceneKitչʾ3DͼÐΡ£
Èí¼þÐèÇó
´´½¨±¾ÎÄÏà¹Ø´úÂë֮ǰ£¬ÏÈÒªÔÚOSX 10.9»ò¸ü¸ß°æ±¾Öа²×°Xcode 6.1¡£ÎÄÖеĴúÂë¿ÉÒÔÖ±½ÓÔÚÄ£ÄâÆ÷ÖÐÔËÐУ¬ÏëÒª²¿Êðµ½Ó²¼þÉ豸Éϵϰ£¬ÐèÒª¼¤»îiOS¿ª·¢ÕßÕ˺š£
iOSÐÂÏîÄ¿´´½¨
´´½¨ÐÂÏîÄ¿£¬¿ÉÒÔͨ¹ýXcodeÆô¶¯Ê±µÄ»¶Ó¶Ô»°¿ò£¬»òÊÇ¡°Îļþ¡úн¨¡úÏîÄ¿¡±²Ëµ¥¡£
³öÏÖÔÚXcodeд°¿Ú²Ëµ¥ÖеÄжԻ°¿ò°üº¬Á˶àÖÖiOS»òOS XÓ¦ÓÃÑ¡Ïî¡£Óкܶàȱʡģ°æÀàÐÍ£¬ÓÃÒÔ´´½¨²»Í¬ÐÐΪµÄʾÀý´úÂëÏîÄ¿¡£

Ñ¡Ôñ¡°iOS¡úÓ¦ÓáúÓÎÏ·¡±¿ÉÒÔ´ÓÖڶ಻ͬÀàÐÍÖÐÑ¡ÔñÒ»¸öÀ´´´½¨Ä£°æ£º
1.SceneKit
2.SpriteKit
3.OpenGL ES
4.Metal
ÓÃSceneKit´´½¨Ò»¸öÃæÏòͨÓÃÉ豸µÄÃûΪMerrySwiftmasµÄSwiftÓ¦Óᣣ¨Í¨ÓÃÓ¦ÓÃÒâζןÃÓ¦ÓÿÉÒÔÔËÐÐÔÚiPadºÍiPhone/iPodÉÏ£»Èç¹ûÓ¦ÓÃÖ»ÃæÏòÒ»ÖÖÉ豸£¬¿ÉÒÔÔÚ´Ë´¦»ò½ÓÏÂÀ´µÄinfo.plistÖнøÐиü¸Ä£©¡£

ÔËÐÐÏîÄ¿
ÕâÑù¾Í¸ù¾ÝÄ£°æ´´½¨ÁËÒ»¸öÐÂÏîÄ¿¡£ÏîÄ¿µÄÓû§½çÃæ¿ÉÒÔ±»»®·ÖΪËĸö¶ÀÁ¢ÇøÓò£º×ó±ßÊǵ¼º½Çø£¨¿ÉÒÔͨ¹ý¿ì½Ý¼ü?1-9½øÐÐÇл»£©£»ÓÒÉϲ¿ÊǸ÷ÖÖ¼ìÊÓÆ÷£¨¿ÉÒÔͨ¹ý¿ì½Ý¼ü??1-9½øÐÐÇл»£©£»ÓÒÏ·½ÊǸ÷¸öÀà¿â£¨¿ÉÒÔͨ¹ý¿ì½Ý¼ü^??1-9½øÐÐÇл»£©¡£

´°¿ÚÖмäÊDZà¼Çø£¬¸ÃÇøÓò»áÏÔʾµ¼º½ÇøËùÑ¡ÖеÄÎļþ¡£Ñ¡ÖÐ×î¶¥²ãÏîĿʱ£¬±à¼Çø»áչʾһϵÁÐͨÓÃÐÅÏ¢£¨ÕâЩÐÅÏ¢´æ´¢ÔÚinfo.plistÎļþÖУ©£»µ¥»÷Ñ¡ÖÐÆäËûÎļþʱ£¬±à¼Çø»á·¢Éú±ä»¯£¬Ë«»÷Îļþʱ£¬Ôò»áµ¯³öº¬ÓиÃÎļþµÄд°¿Ú¡£
´°¿Ú¶¥²¿ÊÇÔËÐа´Å¥£»ÔËÐÐÒâζ׏¹½¨²¢Æô¶¯È±Ê¡Ä¿±êÉ豸¼°Ó¦Óã»±¾ÀýÖУ¬ÊÇÒ»¸ö¼ÓÔØÓ¦ÓõÄÄ£ÄâÆ÷´°¿Ú£º

Swift´úÂë¼ò½é
·É´¬µÄ¼ÓÔØ¡¢ÏÔʾÊÇ¿¿GameViewController.swiftÎļþÖеÄviewDidLoadº¯Êý¡£
import UIKit
import SceneKit
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let scene = SCNScene()
...
let scnView = self.view as SCNView
scnView.scene = scene
scnView.autoenablesDefaultLighting = true
scnView.allowsCameraControl = true
}
...
} |
ÕýÈçÆäËûCÀàÐÍÓïÑÔ£¬¿é¼¯³ÉÓû¨À¨ºÅ{}£¬Àà³ÉÔ±·ÃÎÊÓÃ.£¬º¯ÊýºÍ¹¹ÔìÆ÷´«²ÎÓÃÀ¨ºÅ()¡£²ÎÊý¿ÉÒÔÊǶ¨Î»²ÎÊý»òÃüÃû²ÎÊý£¬Ã°ºÅ¸ô¿ªÃû³ÆºÍÖµ¡£
Ëä˵SwiftÊǾ²Ì¬±àÒëµÄÇ¿ÀàÐÍÓ¦Óã¬È´²»±ØÉùÃ÷±äÁ¿ÀàÐÍ¡£Swift»áÔÚ±àÒëʱ×Ô¶¯ÍƵ¼¡£VarÓÃÓÚÉùÃ÷±äÁ¿£¬letÓÃÓÚÉùÃ÷³£Á¿¡£
¹Ø¼ü×ÖasÓÃÓÚÀàÐÍת»»£¬ÓÐÁËËü£¬Ô´ÓÚUIViewController³¬Àà¡¢±»ÉùÃ÷ΪUIViewµÄself.view¾Í¿ÉÒÔµ±SceneKit
SCNViewʹÓ㬽ø¶ø¶ÔÖîÈçscene»òÊÇallowsCameraControlÕâÀàSceneKitÌØÓеÄ×ֶνøÐзÃÎÊ¡£
Ìæ»»ÓîÖæ·É´¬
ÊÓͼ¿ØÖÆÆ÷Ê״μÓÔØÊ±£¬viewDidLoad()µÄº¯ÊýÌå»á±»µ÷Ó㬺¯ÊýÌå¿ÉÒÔÓÃÉÏÊö´úÂëÌæ»»¡£ÔËÐÐÌæ»»ºóµÄ´úÂë»áµÃµ½²»º¬ÆäËûÐÅÏ¢µÄºÚÉ«ÆÁÄ»¡£
³¡¾°Í¼Ïñͨ¹ý½áµã½á¹¹½øÐÐչʾ£¬²¢ÒÔrootNodeΪ¶¥²ã½áµã¡£Èκνáµã¶¼ÄÜÌí¼Ó×Ó½áµã£»½áµãµÄ·×ª±ä»»»áͳһӰÏìÆäËùÓÐ×Ó½áµã¡£
ÏòͼÖÐÌí¼ÓÖùÌ壬¿ÉÒÔÏñÏÂÃæÕâÑù£¬´´½¨Ò»¸öº¬ÓÐSCNCylinderµÄSCNNode²¢Ìí¼Óµ½Í¼ÖУº
...
scnView.allowsCameraControl = true
let rootNode = scene.rootNode
let cylinder = SCNCylinder(radius:1,height:3)
let tree = SCNNode(geometry: cylinder)
rootNode.addChildNode(tree) |
Èç¹ûÏÖÔÚÔËÐÐÓ¦Óã¬Äã»á¿´µ½Ò»¸öÏ൱ÎÞȤµÄ°×¿é£º

ÖùÌå¿´ÉÏÈ¥²¢²»¾ß±¸3DЧ¹û£¬ÕâÖ»ÊÇÒòΪÖùÌåÉÐδÉÏÉ«¡¢³¡¾°ÉÐδͶµÆ¹â¡£ÕâЩ¶¼ºÜÈÝÒ׸㶨£º¿ÉÒÔÏñÏÂÃæÕâÑù£¬½«ÖùÌåµÄÂþ·´Éä²ÄÖÊÉÏÉ«£¬³¡¾°Í¶×Ô¶¯µÆ¹â£º
...
rootNode.addChildNode(tree)
cylinder.firstMaterial?.diffuse.contents = UIColor.brownColor()
scnView.autoenablesDefaultLighting = true |
ÏÖÔÚÔÙÔËÐÐÓ¦Óã¬ÖùÌå¾Í»áÏÔʾ³ö×ÅÉ«ºóµÄµÄ3DЧ¹û¡£ÒòΪ³¡¾°ÔÊÐíÉãÏñ¿ØÖÆ£¨²ÉÓÃÉϵÛÊӽǹ۲죩£¬ËùÒÔ¿ÉÒÔͨ¹ýÊÖÖ¸»òÊó±êÊÖÊÆÍ϶¯³¡¾°£º

ÏÂÒ»²½ÊÇÔÚÖùÌåÖ®ÉÏÌí¼Ó×¶Ì壬·½·¨ÓëÌí¼ÓÖùÌåÀàËÆ¡£
...
scnView.autoenablesDefaultLighting = true
let cone = SCNNode(geometry: SCNCone(topRadius:0, bottomRadius:3, height:3))
cone.position.y = 3
cone.geometry?.firstMaterial?.diffuse.contents = UIColor.greenColor()
tree.addChildNode(cone) |
ΪÁ˰Ñ×¶Ìå·ÅÔÚÖùÌåÖ®ÉÏ£¬³õʼλÖÃÉÏÒÆÁË3¸öµ¥Ôª£¬µ«ÈÔ±£³ÖºÍÖùÌåÖÐÐĶԳơ£?.ÊÇ¿ÉÑ¡·ÃÎÊÆ÷£ºÈç¹ûֵΪ¿Õ£¬ÄÇôһÇж¼²»±ä£»Èç¹ûÖµ·Ç¿Õ£¬ÄÇô¼ÆËã±í´ïʽµÄÊ£Óಿ·Ö¡£
ÏÖÔÚÓ¦ÓõÄÔËÐнá¹ûÈçÏ£º

Íê³ÉÊ÷
ÓÉÓÚÒªÔÚ¶¥²¿Ìí¼Ó¸ü¶à×¶Ì壬׶ÌåµÄ´´½¨´úÂë»á±»Öظ´¶à´Î¡£Ò²¿ÉÒÔÓú¬ÓÐÕⲿ·Ö´úÂëµÄforÑ»·Ìæ´ú¡£
...
scnView.autoenablesDefaultLighting = true
for i in 1...3 {
let cone = SCNNode(geometry: SCNCone(topRadius:0, bottomRadius:3, height:3))
cone.position.y = 2 * Float(i) + 1
cone.geometry?.firstMaterial?.diffuse.contents = UIColor.greenColor()
tree.addChildNode(cone)
} |
forÑ»·ÖУ¬ÓÃ1...3´ú±í±ÕÇø¼ä[1,2,3]¡£°ë±ÕºÏÇø¼ä[1,2]¿ÉÒÔÓÃ1..<3±íʾ¡£Í¨¹ý¶Ñµþ×¶ÌåÀ´Éú³ÉÊ÷¡£
ÕûÐÍi¿ÉÒÔͨ¹ýFloatÇ¿ÖÆ×ª»»³É¸¡µãÐÍÒÔ±ã¸ù¾ÝÊ÷¸ù¼ÆËãÏà¶ÔλÖá£
Ó¦ÓÃÔËÐÐʱ£¬»áÏÔʾһ¿ÃÊ÷£º

Ìí¼ÓÀñÎï
ÓÃSCNBoxµÄ»°£¬¿ÉÒÔ°ÑÀñÎï·ÅÔÚÊ÷Ï¡£ÖùÌ壨¼´Ê÷µÄµ×²¿£©µÄλÖÃÔÚ0,0,0¼°ÆäÖ®ÉÏ£¬ºÐ×ÓµÄλÖÃÒªÂÔµÍÒ»µã£ºy=-1¡£XºÍz·½ÏòËæÒâ¡£¿ÉÒÔÏÔʽָ¶¨Î»Ö㬵«forÑ»·ËùÔÊÐíµÄλÖÃÖ»ÓÐ(0,1)£¬(1,0)ÒÔ¼°(1,1)¡£
for i in 1...3 {
let present = SCNNode(geometry: SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0))
present.geometry?.firstMaterial?.diffuse.contents = UIColor.blueColor()
present.position.x = Float(i % 2) * 2
present.position.z = Float(i / 2) * 2
present.position.y = -1
tree.addChildNode(present)
} |

ÖØ¹¹ÎªÀà
°ÑÕâЩһ¹ÉÄÔ¶ù¶Ñ·ÅÔÚÊÓͼ¿ØÖÆÆ÷¼ÓÔØµÄʱºò£¬²¢²»ÊǺõÄʵ¼ù·½°¸¡£ÕâÖÖÇé¿öÏ£¬´úÂ븴ÓúͲâÊÔ¶¼»á±äµÃÏà¶ÔÀ§ÄÑ¡£Êµ¼ÊÉÏ£¬´´½¨Ê÷µÄÏà¹Ø´úÂë¿ÉÒÔµ¥¶À³ÉÀà¡£
Óá°Îļþ¡úн¨¡úÎļþ¡±´´½¨Ò»¸öÃûΪChristmasTreeµÄiOS SwiftÎļþ¡£Îļþ´´½¨Ê±Îª¿Õ£¬ÐèÒªµ¼ÈëSceneKit²¢ÉùÃ÷Ò»¸öÃûΪChristmasTreeµÄÀà¡£
import SceneKit
class ChristmasTree {
} |
Ïë´´½¨SCNNode×ÓÀàµÄ»°£¬Òª°Ñ¸¸ÀàÃû³Æ·ÅÔÚ×ÓÀàÃû³ÆÖ®ºó£¬²¢ÓÃðºÅ¸ô¿ª¡£ÊµÏÖÐÒ飨½Ó¿Ú£©ÓõÄÒ²ÊÇͬÑùµÄÓï·¨¡£ÕâÑù×öʱ£¬»¹ÒªÌí¼ÓһϵÁе÷ÓÃinitµÄ¹¹ÔìÆ÷£º
class ChristmasTree: SCNNode { override init() { super.init() } required init(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } |
SwiftÔ¼¶¨£º¶ÔÏóÒªÓÐÒ»¸öÖ÷Òª£¨»òȱʡ£©³õʼ»¯º¯Êý£»ÔںܶàUIKit¶ÔÏóÖУ¬ÕâÒâζ×ÅÒª×ñÑNSCoderÐÒ飬Ҳ¾ÍÊÇ˵£¬ÒªÓÐÒ»¸ö±àÂëÆ÷Ïà¹ØµÄinitº¯Êý¡£Í¨¹ý°Ñ×Ö¶ÎÊôÐÔת»»³ÉÐòÁл¯½á¹¹²¢»¹Ô£¬NSCoderÄܽ«Interface
BuilderÖеĶÔÏó³Ö¾Ã»¯¡£Èç¹ûÄãÍüÁËд£¬Xcode»á±¨´í²¢°ïÄãÌíÉÏ¡£ÕâÑù×öµÄʵ¼ÊЧ¹û¾ÍÊÇ£¬ÓÃSwiftÖØÐ´×ÓÀàʱ£¬¡°ÐèÒª¡±Ò»¸ö¹¹ÔìÆ÷£¬¡°ÖØÐ´¡±ÆäËû¹¹ÔìÆ÷¡£
ÏÖÔÚÀà¿ò¼ÜдºÃÁË£¬Ò²¸Ã²¹³äÄÚÈÝÁË¡£°Ñ´´½¨Ê÷µÄ´úÂë´ÓviewDidLoad·½·¨Òƶ¯µ½ChristmasTreeµÄinit·½·¨ÖÐÀ´£º
override init() {
super.init()
let cylinder = SCNCylinder(radius:1,height:3)
let trunk = SCNNode(geometry: cylinder)
cylinder.firstMaterial?.diffuse.contents = UIColor.brownColor()
addChildNode(trunk)
for i in 1...3 {
let cone = SCNNode(geometry: SCNCone(topRadius:0, bottomRadius:3, height:3))
cone.position.y = 2 * Float(i) + 1
cone.geometry?.firstMaterial?.diffuse.contents = UIColor.greenColor()
addChildNode(cone)
}
for i in 1...3 {
let present = SCNNode(geometry: SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0))
present.geometry?.firstMaterial?.diffuse.contents = UIColor.blueColor()
present.position.x = Float(i % 2) * 2
present.position.z = Float(i / 2) * 2
present.position.y = -1
addChildNode(present)
}
} |
ÕâÑù¾Í°ÑÊ÷µÄÌí¼Ó¹¤×÷Áôµ½ÊÓͼ¿ØÖÆÆ÷¸üÐÂʱÔÙ×ö£º
override func viewDidLoad() {
super.viewDidLoad()
let scene = SCNScene()
let scnView = self.view as SCNView
scnView.scene = scene
scnView.allowsCameraControl = true
let rootNode = scene.rootNode
let tree = ChristmasTree()
rootNode.addChildNode(tree)
scnView.autoenablesDefaultLighting = true
} |
ÖÖÖ²ÉÁÖ
¿ÉÒÔÓµÓÐÉÏǧ¿ÃÊ÷£¬ÎªºÎÂú×ãÓÚÖ»ÓÐÒ»¿Ã£¿ÏÖÔÚÊ÷±»³éÏóΪһ¸öÀà¡£ÖÖÒ»°Ù¿ÃÊ÷ºÜ¼òµ¥¡£ÓÃǶÌ×forÑ»·µÄpositionÊôÐÔ°²ÅÅÿ¿ÃÊ÷µÄλÖá£ÔÚ²½³¤²»Îª1µÄÇé¿öÏ£¬¿ÉÒÔͨ¹ýÄÚÖú¯ÊýstrideÉú³ÉÊý×Öµü´úÆ÷¡£
for x in stride(from:0, to:100, by:10) {
for z in stride(from:0, to:100, by:10) {
let tree = ChristmasTree()
tree.position.x = Float(x)
tree.position.z = Float(z)
rootNode.addChildNode(tree)
}
} |
ÕâÑù£¬Ò»°Ù¿ÃÊ÷¾ÍÖÖºÃÁË£¬¼ä¸ô10¸öµ¥Î»£¬·Ö²¼ÔÚ2DÍø¸ñÖС£

ËùÓÐÊ÷¿´ÉÏÈ¥¶¼ºÜÏàËÆ£¬²¿·ÖÔÒòÔÚÓÚËùÓÐÀñÎïµÄÕûÆëÅÅÁС£¼ÓÈëÊ÷µÄÐýתºó£¬»á²»ÔÙÄÇôÏàËÆ¡£ÐýתÓû¡¶ÈºâÁ¿£ºÔ²µÄ»¡¶ÈΪ2¦Ð£¬Òò´Ë£¬ÏëµÃµ½Ëæ»úλÖ㬿ÉÒÔѡһ¸ö180ÒÔÄÚµÄËæ»úÊý£¬³ýÒÔ180£¬ÔÙ³ËÒԦУº
tree.position.x = Float(x) tree.position.z = Float(z) tree.rotation.y = 1 tree.rotation.w = Float(M_PI) * Float(arc4random_uniform(180)) / Float(180) |
ÏÖÔÚÉÁÖ¿´ÉÏÈ¥ÓÐÄÇôһµã²»Ò»ÑùÁË£º

Ìí¼ÓÑÕÉ«
ĿǰËùÓÐÀñÎï¶¼ÊÇÀ¶É«¡£Èç¹ûÄãÇ¡ÇÉϲ»¶À¶É«£¬¾ÍºÜ²»´í£¬Ö»ÊÇ¿´ÉÏÈ¥»áÓÐÒ»µãµ¥µ÷¡£»¹ÓÐÒ»ÖÖÑ¡Ôñ£¬Äã¿ÉÒÔ´´½¨ÑÕÉ«ÐòÁУ¬²¢Ëæ»úѡȡ¡£
¾¡¹ÜSwiftÖ§³ÖstructºÍenumÀàÐ͵Ästatic³ÉÔ±£¬µ«Ö±µ½Swift1.1£¬Éв»Ö§³ÖstaticÀà³ÉÔ±¡££¨Êµ¼ÊÉÏ£¬ÒªÊÇÄãÊÔ×ÅÏòSwiftÀàÖÐÌí¼Óstatic³ÉÔ±£¬±àÒëÆ÷»á±§Ô¹Äã²»¸ÃÓÃstatic£¬¶øÓ¦¸ÃÓÃclass£¬¿Éµ±ÄãÓÃÁËclass£¬±àÒëÆ÷ÓÖ»á±íʾÉв»Ö§³Ö£©
ÖµµÃÇìÐÒµÄÊÇ£¬ÀàÖ®ÍâÒ²ÄÜÉùÃ÷±äÁ¿£¬ÕâÑùÉùÃ÷µÄÈ«¾Ö±äÁ¿ÕýºÃÄÜ´æ´¢¹¹½¨ºÃµÄÑÕÉ«ÐòÁС£Í¨¹ýËæ»úϵÊý¾Í¿ÉÒÔѡȡÀñÎïµÄÑÕÉ«¡£
let colors = [
UIColor.blueColor(),
UIColor.cyanColor(),
UIColor.magentaColor(),
UIColor.orangeColor(),
UIColor.purpleColor(),
UIColor.redColor(),
UIColor.whiteColor(),
UIColor.yellowColor(),
]
class ChristmasTree: SCNNode {
...
let present = SCNNode(geometry: SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0))
present.geometry?.firstMaterial?.diffuse.contents = colors[random() % colors.count] |

½áÂÛ
SwiftÊÇÒ»ÖÖºÜÈÝÒ×ÉÏÊÖµÄÓïÑÔ£¬ÒòΪËüÓÐ×Ô¼ºµÄREPL£¨swift£¬¼òµ¥½»»¥Ê½±à³Ì»·¾³£¬Ô´ÓÚLisp£¬ÒëÕß×¢£©£»Ö»Í¨¹ý¼¸ÐдúÂë¾Í¿ÉÒÔÓÃSceneKit´´½¨½»»¥Í¼ÐÎÓ¦Óá£×îºó£¬×£ÄãÃÇÊ¥µ®¿ìÀÖ£¡
|