Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓÃSwiftºÍSceneKit¿ª·¢Ò»Æ¬Ê¥µ®Ê÷ÁÖ
 
×÷ÕߣºAlex Blewitt À´Ô´£ºInfoQ ·¢²¼ÓÚ£º 2015-05-26
  4050  次浏览      27
 

¹ýÈ¥¼¸ÄêÖУ¬Òƶ¯Ó¦ÓÃÏñ·ç±©Ò»Ñùϯ¾íÊÀ½ç£¬¸Ä±äÁËÎÒÃǵÄÍøÉϹ¤×÷¡¢ÓéÀÖ·½Ê½¡£ºÜ¶àÒÆ¶¯Ó¦Óÿª·¢¼¼ÊõÓ¦Ô˶øÉú£¬¶øÒƶ¯Ò²¿ªÊ¼µÃµ½¿ª·¢¹ý³ÌÖØÊÓ¡£¾¡¹ÜÒÆ¶¯ÒѾ­¿´ËÆÎÞËù²»ÔÚ£¬µ«Î´À´²Å¸Õ¸Õ¿ªÊ¼¡£ÐÂÒ»´úµÄÒÆ¶¯É豸£¬ºÃ±È¿É´©´÷É豸£¬ºÃ±ÈÎïÁªÍøµÄÐíÐí¶à¶àÒÆ¶¯¹¹¼þ£¬¾ÍÔÚÎÒÃÇÃæÇ°¡£ÎÒÃǻᷢÏÖ£ºÓÃÓÚÊý¾ÝչʾºÍÃüÁî½ÓÊÕµÄÓû§½çÃæ²»¶ÏµØÍƳ³öУ»Ô½À´Ô½¶àµÄ¹«Ë¾Õ¾ÔÚÕæÕýµÄÒÆ¶¯À˳±Ö®áÛ¡£Õâ»áÔÚδÀ´¼¸ÄêÖÐÓ°ÏìÈí¼þµÄÉè¼Æ¡¢¿ª·¢¡¢²âÊÔ·½Ê½¡£

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½øÐÐÇл»£©¡£

´°¿ÚÖмäÊÇ±à¼­Çø£¬¸ÃÇøÓò»áÏÔʾµ¼º½ÇøËùÑ¡ÖеÄÎļþ¡£Ñ¡ÖÐ×î¶¥²ãÏîĿʱ£¬±à¼­Çø»áչʾһϵÁÐͨÓÃÐÅÏ¢£¨ÕâЩÐÅÏ¢´æ´¢ÔÚ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´´½¨½»»¥Í¼ÐÎÓ¦Óá£×îºó£¬×£ÄãÃÇÊ¥µ®¿ìÀÖ£¡

   
4050 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ

ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ