105 8: hvad er nyt i spritekit, del 2

, 105 8: hvad er nyt i spritekit, del 2,,,,, 22,,,,,,,,, 3,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss. denne post er en del af en serie kaldet 105 8: hvad ' nye i spritekit.ios 8: hvad ' nye i spritekit, del 1, denne forelæsning giver et overblik over de nye elementer i spritekit ramme, der blev indført i 105 8..de nye elementer, der har til formål at gøre det lettere at støtte avanceret spil virkninger, herunder støtte til skik opengl es fragment shaders, belysning, skygger, avancerede nye fysiske virkninger og tegnefilm og integration med scenekit.i denne forelæsning, vil du lære at gennemføre disse nye elementer.,,, serie format, denne serie er delt op i to tutorials og dækker de vigtigste nye elementer i spritekit rammer.i den første del, vi ser på shaders, lys og skygger.i anden del, vil jeg tale om   fysik og scenekit integration.,, og en del af denne række står for sig selv, vil jeg anbefale følgende med trinvis at forstå de nye elementer i den spritekit rammer.   efter at have læst begge dele, vil du være i stand til at skabe både enkle og mere avancerede lege med nye elementer i spritekit ramme.,, downloade xcode projekt, vi har skabt i den tidligere artikel fra github - hvis de vil følge med.,,, 1.fysik, 105 8, spritekit indført nye fysiske karakteristika, såsom per pixel fysik, begrænsninger, omvendt kinematik, og fysik områder.,, kinematik er processen med beregning af 3d - holdning i slutningen af en tilknyttet struktur, idet de vinkler, af alle steder.omvendt kinematik (*) har den modsatte virkning.i slutningen af den struktur, hvad vinkler ved leddene skal gøre for at nå dette mål?følgende billede tydeliggør disse begreber.,,,,, med spritekit, bruger du ånder til at repræsentere led, at anvende forholdet mellem forælder og barn til at skabe en fælles hierarki.   for hver forbindelse, du definerer den inverse kinematik begrænsninger på hvert fælles og kontrollere den minimale og maksimale rotation vinkel mellem dem.bemærk, at hvert fælles roterer omkring ankervaluta.,,, trin 1: omvendt kinematik (*), åbne, physicssceneeditor, og tilføje, croquette-o.png, sprite til gul rektangel.vælg den sprite og ændre  , navn   i, sknode inspektør,  , rod.   fastsat, fysik definition kropsbygning, at ingen,.,, tilføje en anden sprite, wood.png, og ændre sin  , navn  ,  , firstnode,   ændre, moder.,   område, rod.   træk, firstnode, ved at sætte den på ret til  , rod, og resize det at skabe et rektangel, som vist nedenfor.sæt  , fysik definition kropsbygning, at ingen,.,, bør resultatet ligner følgende scene.,,,,, bemærke, at når du vælger en sprite node, en hvid cirkel synes i centrum.den cirkel symboliserer den sprite node er anker, som hver rotation er udført.,,,,,, trin 2: flere ånder,,, efter det foregående trin og tilføje yderligere to ånder.,,, første sprite,,, tilføje en anden  , croquette-o.png, sprite.,, ændre dens navn,  , secondnode,.,, ændre sin  , moderselskab, firstnode,.,, holdning, det om retten til, firstnode,.,, ændre sin  , fysik definition kropsbygning, at ingen,.,, andet sprite, tilføjer endnu en  , wood.png, sprite.,, ændre sin  , navn, område  , thirdnode,.,, ændre sin  , moderselskab, secondnode,.,, holdning, det om retten til, secondnode,., resize det at skabe et rektangel,.,, ændre sin  , fysik definition kropsbygning, at ingen,.,, bør resultatet ligner følgende,,,,,,, scene.trin 3: redigere og simulere, at afprøve fælles forbindelser, interaktioner og begrænsninger, behøver du ikke at bygge og drive deres projekt.xcode yder to former, redigere og simulere.,, simulere   tilstand   giver en reel tid testmiljø mens edit   tilstand anvendes til at skabe og udgive din scene.indtil videre har vi arbejdet i edit tilstand.bemærk, at eventuelle ændringer i simulere tilstand er ikke reddet,.,, på bunden af den scene, redaktør, kan du se, hvilken tilstand du arbejder i øjeblikket.hvis den nederste bar gerningsstedet redaktør er hvid, så er du i edit tilstand.en blå baggrund tyder på, at du er i simulere tilstand.klik på den etiket, der er i bunden bar til at skifte mellem de to metoder.,,,,,,,, skifte tilstand for at simulere og udvælge de firstnode, secondnode, og thirdnode nisser.du kan vælge flere ånder ved presning, kommando,.,, næste, presse, flytte kontrollen klik, og flytte ånderne rundt i stedet.resultatet er, at den sprite knudepunkter livfulde og rotér.men rotation er underlig og skal rettes.,,, trin 4: ik begrænsninger,,, gå tilbage til at redigere tilstand og tilføje nogle begrænsninger for sprite knudepunkter.udvælger hver sprite knudepunkt og ændre dets egenskaber som følger:,, udvælge, rod, og secondnode, sprite knudepunkter og fastsætte, ik begrænsninger, max vinkel, til 0.   udvælge, firstnode, og thirdnode, sprite knudepunkter og  , anker, x, til 0.   og  , ik begrænsninger max vinkel, 90,.,. ved at ændre disse egenskaber, beliggenhed og størrelse af den sprite knudepunkter vil ændre sig.efter at lægge begrænsninger, manuelt tilpasse deres størrelse og   holdning og gå over til at simulere tilstand for at afprøve de nye begrænsninger, vi har tilføjet.,, under skærmbillede illustrerer den korrekte restriktioner konfiguration.,,,,,,, trin 5: magnetfelt node, magnetiske felter er også ny i spritekit.lad os se, hvordan det fungerer, ved at tilføje et magnetisk felt til fysik scene.åben, physicsscene. m, og et tilfælde af variabel ved navn, magneticfieldnode, type, skfieldnode,.,, @ gennemførelse physicsscene {skfieldnode * magneticfieldnode;}, i, didmovetoview:, metode, vi skal finde den scene ved at skabe en, skphysicsbody, f.eks. den scene, og at tilføje en tyngdekraft.   denne betyder, at enhver knudepunkter i stedet vil blive trukket nedad.,, skphysicsbody * physicsbody = [skphysicsbody bodywithedgeloopfromrect: selv. ramme]; [self.physicsworld setgravity: cgvectormake (0 - 9)]; [selv setphysicsbody: physicsbody], for at få den  , magneticfieldnode,   objekt, du har brug for at få sin fysik organ samt dets holdning, og   styrke.   bemærke, at hver enkelt, skfieldnode, har sine egne egenskaber.   følgendekode snippet viser, hvordan vi kan få det magnetiske felt node.vi kan tilføje nye knudepunkt, som et barn knude til gerningsstedet.,, magneticfieldnode = [skfieldnode magneticfield]; [magneticfieldnode setphysicsbody: [skphysicsbody bodywithcircleofradius: 80]]; [magneticfieldnode setposition: cgpointmake (100, 100)]; [magneticfieldnode setstrength: 3]; [selv addchild: magneticfieldnode];,,, skridt 6: interaktioner,,,, at det magnetiske felt i aktion, er vi nødt til at tilføje et par knuder, som det magnetiske felt bestemmelse kan interagere.i det følgende kode snippet, skaber vi tre hundrede nisser.bemærk, at hver sprite node har sin egen fysik organ, og vi sætter, affectedbygravity, ejendom, ja,.,, (int i = 0. jeg < 300; jeg + +) (skspritenode * node4 = [skspritenode spritenodewithtexture: [sktexture texturewithimagenamed: @ "træ. men heller ikke dér er menneskene sikre"] størrelse: cgsizemake (25, 25)]; [node4 setphysicsbody: [skphysicsbody bodywithrectangleofsize: cgsizemake (25, 25)]]; [node4 setposition: cgpointmake (arc4random()% 640, arc4random()%. 950)]; [node4.physicsbody setdynamic: ja]; [node4.physicsbody setaffectedbygravity: ja]; [node4.physicsbody setallowsrotation: sande]; [node4.physicsbody setmass: 0, 9]; [selv addchild: node4]}, afsluttet  , didmovetoview: metode bør se ud som følger:,, - didmove (indhold)toview: (skview *) betragtning {skphysicsbody * physicsbody = [skphysicsbody bodywithedgeloopfromrect: selv. ramme]; [self.physicsworld setgravity: cgvectormake (0 - 9)]; [selv setphysicsbody: physicsbody] magneticfieldnode = [skfieldnode magneticfield]; [magneticfieldnode setphysicsbody: [skphysicsbody bodywithcircleofradius: 80]]; [magneticfieldnode setposition: cgpointmake (100, 100)]; [magneticfieldnode setstrength: 3]; [selv addchild: magneticfieldnode]; (int i = 0. jeg < 300; jeg + +) (skspritenode * node4 = [skspritenode spritenodewithtexture: [sktexture texturewithimagenamed: @ "træ. men heller ikke dér er menneskene sikre"] størrelse: cgsizemake (25. 25)]; [node4 setphysicsbody: [skphysicsbody bodywithrectangleofsize: cgsizemake (25, 25)]]; [node4 setposition: cgpointmake (arc4random()% 640, arc4random()%. 950)]; [node4.physicsbody setdynamic: ja]; [node4.physicsbody setaffectedbygravity: ja]; [node4.physicsbody setallowsrotation: sande]; [node4.physicsbody setmass: 0, 9]; [selv addchild: node4]), før vi bygge og drive den anmodning, vi har forrang, touchesmoved: withevent:, metode, så du kan flytte det magnetiske felt node ved at banke din finger, - (indhold) touchesmoved: (nsset *) berører withevent: (uievent *) tilfælde {(uitouch * røre i rører) ([magneticfieldnode setposition: [berøring locationinnode: selv]]), bygge og drive anvendelsen at teste det magnetiske felt node ervirkning på gerningsstedet.   for yderligere oplysninger om at simulere fysik ved hjælp af spritekit ramme, jeg anbefaler, at man læser apples dokumentation om dette emne., 2.scenekit integration, scenekit er en højtstående objective-c rammerne for opbygning af ansøgninger og spil, der anvender 3d grafikken.det støtter import, manipulation og levering af 3d - aktiver.det gør algoritme kræver kun en beskrivelse af din scene er indholdet, tegnefilm og aktioner, du ønsker, det skal udføre., gennem scenekit, du er nu i stand til at skabe og levere 3d - indhold ved hjælp af spritekit.scenekit har et træ, struktur og kan anvendes på to måder:,,, scenekit eksterne miljø, integreret i spritekit,, scenekit har et træ hierarki sammensætning.   i en separat scenekit miljø, basisklasse for træet struktur er en  , scnnode,   instans, som vist i nedenstående diagram.   en  , scnnode,   objekt i sig selv ingen synlige indhold, når scenen med det er gjort.det definerer en position i rummet, der repræsenterer den holdning, rotation, og omfanget af et knudepunkt i forhold til dets moderselskab node.,,,,,, når du integrere scenekit i en spritekit baseret app, du er nødt til at definere, sk3dnode, objekt som roden genstand for din scene.det betyder, at de centrale scenekit hierarki ændringer til følgende:,,,,, bemærke, at ikke alle børn knudepunkt i ovenstående diagram er påkrævet.du kun fastlægge og få de knuder, der passer til deres behov.f.eks. kan du tilføje en  , scnlight, knude til at belyse den scene, selv hvis du ikke omfatte en  , scncamera, knudepunkt i stedet.,,, trin 1: levende billede af modeller,,, spritekit og scenekit støtte en række filformater for importerede modeller.du kan se disse modeller i realtid i xcode.indenfor, stofvirkninger, mappe i dit projekt (, ressourcer > mønstre,), der er en sag, der hedder skib. dae,.  , når du vaelger denne fil, du har fået forelagt en ny brugerflade, som vist nedenfor.,,,,, i venstre side af redaktør, kan du se to grupper:,,, enheder:,   denne gruppe indeholder oplysninger om den foruddefinerede animeringer, kamera holdning, lys og materialer defineret af model fil.den sag, vi har åbnet indeholder kun oplysninger om modellen geometri og dens materiale.,, scene diagram:,   denne gruppe indeholder oplysninger om den oprindelige formål, maske.denne opgave blev oprettet som et hele, og du ser kun en enkelt maskestørrelse.,,, trin 2: import af en ekstern model, for at bruge scenekit i kombination med spritekit, du er nødt til at importere scenekit bibliotek fra scenekit rammer.åben  , scenekitscene. m, og   omfatter det som vist nedenfor.,,&#omfatter < scenekit /scenekit. h >,, vi skal bruge den model, opbevares i  , skib. dae,   som 3d - scene.i, didmovetoview:, metode, skabe  , scnscene, objekt, der indlæser en scene fra den fil.,, scnscene * shipscene = [scnscene scenenamed: @ "skib. dae"];,, kan du huske træet hierarki, jeg nævnte tidligere.at tilføje  , shipscene,   imod, skscene, genstand, to skridt er nødvendige:,, skabe en, sk3dnode, genstand, definere en   scenekit scene at gøre, i dette tilfælde gerningsstedet til at gøre, er  , shipscene,.   bemærke, at man også definere node holdning   og dens størrelse, sk3dnode * sk3dnodefist = [[sk3dnode forpl] initwithviewportsize: cgsizemake (300, 300)]; [sk3dnodefist setposition: cgpointmake (200300)]; [sk3dnodefist setscnscene: shipscene]; og endelig tilføje, sk3dnode,   objekt som barn node   til  , skscene,   objekt.,, [selv addchild: sk3dnodefist], for at gøre det endelige resultat, en smule mere tiltrækkende, stedet er baggrund farve grøn som vist nedenfor.,, [selv setbackgroundcolor: [skcolor greencolor]], er dette, hvad den fuldstændige  , didmovetoview:metode skal se ud.bygge og drive anvendelsen se resultatet.,, - (indhold) didmovetoview: (skview *) betragtning {[selv setbackgroundcolor: [skcolor greencolor]] scnscene * shipscene = [scnscene scenenamed: @ "skib. dae"] sk3dnode * sk3dnodefist = [[sk3dnode forpl] initwithviewportsize: cgsizemake (300 300)]; [sk3dnodefist setposition: cgpointmake (200300)]; [sk3dnodefist setscnscene: shipscene]; [selv addchild: sk3dnodefist]}, trin 3: at skabe en skik scene, lad os skabe en mere kompleks scene, der indeholder flere, scnnode, genstande.   for denne anden scene. vi er nødt til at skabe en  , sk3dnode, objekt.,, sk3dnode * sk3dnode = [[sk3dnode forpl] initwithviewportsize: cgsizemake (400 400)]; [sk3dnode setposition: cgpointmake (150,200)];,, vi skaber, scnscene, objekt, som vil indeholde den scene barn knudepunkter.,, scnscene * sceneobject = [scnscene scene];,,, sceneobject, vil have tre knudepunkter:,,,, kamera:,   denne knude anvendes på stedet gennem en bestemt stilling.,, lys,   dette knudepunkt, giver dig mulighed for at se på forskellige væsentlige egenskaber i 3d - objekt.du plejer at   definere lyset form og farve.,, 3d - objekt,   det er importeret eller defineret formål inden for din kode.ved misligholdelse, scenekit gør dig i stand til at definere flere parametriske 3d objekter, der er torus, rubrik, pyramide, område, cylinder, is, rør, kapsel, gulv, 3d - tekst, eller en speciel form., for hvert knudepunkt, du altid udføre tre aktioner.lad os tage kameraet knudepunkt, f.eks.,,, skabe en  , scncamera, formål og definere dets egenskaber, skaber en  , scnnode, som, scncamera, vil blive tildelt, tilføje, scnnode, som et barn knudepunkt for  , scnscene, objekt.,, lad os nu skabe de tre knudepunkter, jeg nævnte tidligere.det er, hvad vi har brug for til at gennemføre for at skabe det kamera node.,, scncamera * kamera = [scncamera kamera] scnnode * cameranode = [scnnode node]; [cameranode setcamera: kamera]; [cameranode setposition: scnvector3make (0, 0, 40)]; [sceneobject.rootnode addchildnode: cameranode],,, misligholdelse, kameraet placering og 3d - scene er beliggende i den oprindelse,  , (0,0,0).med den holdning, ejendom, de kan justere kamera langs de tre akser x, y og z til at ændre sin holdning,.,,, lyset node kræver lidt mere arbejde, men følgende kode snippet skal være let at forstå,.,, scnlight * fokus = [scnlight lys]; [fokus settype: scnlighttypedirectional]; [fokus setcolor: [skcolor redcolor]] scnnode * spotlightnode = [scnnode node]; [spotlightnode setlight: projektør]; [spotlightnode setposition: scnvector3make (0, 0, 5)]; [cameranode addchildnode: spotlightnode]; [sceneobject.rootnode addchildnode: spotlightnode], vil vi også skabe en torus objekt, som vist i følgende kode snippet.,,, scntorus * = = [scntorus toruswithringradius: 13 piperadius: 1,5] scnnode * torusnode = [scnnode nodewithgeometry: torus]; [torusnode settransform: scnmatrix4makerotation (m_pi /3, 0 1, 0)]; [sceneobject.rootnode addchildnode: torusnode], endelig sætter vi den scene, vi ønsker at gøre, og der tilsættes  , sk3dnode,   som barn knudepunkt for, skscene, f.eks., [sk3dnode setscnscene: sceneobject]; [selv addchild: sk3dnode], er dette, hvad det endelige  , didmovetoview:  , metode skal se ud. - (indhold) didmovetoview: (skview *) betragtning {[selv setbackgroundcolor: [skcolor greencolor]] scnscene * shipscene = [scnscene scenenamed: @ "skib. dae"] sk3dnode * sk3dnodefist = [[sk3dnode forpl] initwithviewportsize: cgsizemake (300, 300)]; [sk3dnodefist setposition: cgpointmake (200300)]; [sk3dnodefist setscnscene: shipscene];[en addchild: sk3dnodefist] sk3dnode * sk3dnode = [[sk3dnode forpl] initwithviewportsize: cgsizemake (400 400)]; [sk3dnode setposition: cgpointmake (150200)]; scnscene * sceneobject = [scnscene scene] scncamera * kamera = [scncamera kamera] scnnode * cameranode = [scnnode node]; [cameranode setcamera: kamera]; [cameranode setposition: scnvector3make (0, 0, 40)]; [sceneobject.rootnode addchildnode: cameranode] scnlight * fokus = [scnlight lys]; [fokus settype: scnlighttypedirectional]; [fokus setcolor: [skcolor redcolor]] scnnode * spotlightnode = [scnnode node]; [spotlightnode setlight: projektør]; [spotlightnode setposition: scnvector3make (0, 0, 5)]; [cameranode addchildnode: spotlightnode]; [sceneobject.rootnode addchildnode: spotlightnode] scntorus * = = [scntorus toruswithringradius: 13 piperadius: 1,5] scnnode * torusnode = [scnnode nodewithgeometry: torus]; [torusnode settransform: scnmatrix4makerotation (m_pi /3, 0 1, 0)]; [sceneobject.rootnode addchildnode: torusnode]; [sk3dnode setscnscene: sceneobject]; [selv addchild: sk3dnode]), bygge og drive anvendelse.du skal se noget, der svarer til følgende skærmbillede.,,,,,,, trin 4: gennemførelse af informationstiltag i området,,, du kan stadig scene ved hjælp af  , cabasicanimation, klasse.du har bare brug for at skabe en instans, cabasicanimation,   under påberåbelse af, animationwithkeypath:,.informationstiltag, vi skaber i følgende kode snippet vil sløjfe på ubestemt tid, og som har en varighed på fem sekunder.der tilføjes følgende kode snippet til, didmovetoview: metode.,, cabasicanimation * torusrotation = [cabasicanimation animationwithkeypath: @ "rotation"] torusrotation.byvalue = [nsvalue valuewithscnvector4: scnvector4make (1, 1, 0, 0 * m_pi)]; [torusrotation settimingfunction: [camediatimingfunction functionwithname: kcamediatimingfunctionlinear]]; [torusrotation setrepeatcount - uendelighed]; [torusrotation setduration: 5]; [torusnode addanimation: torusrotation forkey: nul], bygge og drive anvendelse for at teste animation.,,, 3.mere spritekit,, hvis du ønsker at lære mere om spritekit, så vil jeg opfordre dem til at læse følgende spritekit tutorials:,, opbygge et fly spil med sprite kit  , opbygge missil kommando med sprite kit  , programmerbare sdk: bygge et forhold, spil, hvis du vil læse mere om spritekit rammer, jeg anbefaler, at man læser apples spritekit programming guide   eller kigger den referenceramme.,, indgåelse,,, det var den anden lektion i denne todelte serie om nye elementer af den ramme, der blev indført i spritekit 105 8.   i denne del, du har lært at bruge fysik, simulering og integrere scenekit  , hvis du har. alle spørgsmål eller kommentarer, er du velkommen til at smide en linje i bemærkningerne.

Inverse Kinematics

Anchor point
Resulting image
Simulate mode
Edit mode
Constraints in action
SceneKit hierarchy
SceneKit  SpriteKit hierarchy
Xcode live preview
Final result



Previous:
Next Page: