I «m jobber med et 2D-spill for WPF8 ved hjelp av XNA 4.0.

Alt går bra, men det er for fort. Jeg lurte bare på, hva kunne jeg gjøre mellom slutten av spillet og poengsummen, og før spillet starter? Jeg ser etter et eksempel på hvordan jeg gjør det (svart skjerm med «lasting» skriver i Windows-telefonstil) eller en måte å implementere det på.

Kommentarer

  • Hvorfor vise en lasteskjerm når det er helt unødvendig? Hvorfor gjør du ikke ' t du bare gjør en jevn overgang?
  • Ja, det er også en løsning, men jeg fant ikke ' ingen måte å gjøre det på. Som et bibliotek med overgangsanimasjon.

Svar

Ingen kode fra meg, siden jeg ikke er så erfaren med XNA, men dette er mer et generelt «problem»:

  • Først av alt – som nevnt i kommentarene – ikke legg til (aldri!) Falske lasteskjermer! Folk vil tro at det virkelig er en ressurs som kan vise appen din i et dårligere lys enn den egentlig burde være. Spesielt på mobil stoler du vanligvis ikke på en app som viser skjermbilder med konstant belastning for trygt batteri.

  • Legg i stedet til en overgang. En veldig enkel å gjøre overgang vil være å blande til / fra svart. Du kan gjøre mer interessante ting når du bruker skyggelegger og gjengir til tekstur, men denne bør være mer enn tilstrekkelig for å redusere tempoet litt.

De grunnleggende trinnene er ganske mye selvforklarende og det er flere måter å nærme seg dette på, også avhengig litt av hvordan du håndterer spilltilstand, fremgang osv.

  • I stedet for å bytte spilltilstand umiddelbart, f.eks. fra GAME_PLAYING til GAME_HIGHSCORE, satte du noen teller. La oss kalle det blending_time.
  • Derfra og fremover, så lenge blending_time ikke er lik null, vil du bare tegne en svart firkant over hele skjermen ved å bruke en alfa-verdi basert på tiden som er igjen.
  • Når telleren din når null, gjør du tilstandsbryteren.
  • For å få en myk innblanding kan du reversere det hele .
  • Sett igjen blending_time til tiden du vil blande (det kan være lurt å bruke en annen verdi eller en eller annen bryter for å identifisere om det blandes til eller fra svart).
  • Så lenge blending_time ikke er «t 0, ville du nok en gang tegne en svart firkant over hele scenen med alfa, avhengig av tid igjen (denne gangen starter med 100% ugjennomsiktig).

Kommentarer

  • Enig, men tenk også på om du virkelig har ingenting å gjøre i denne tiden. Noen spill gir høy score til en server, noen viser reklame, noen viser fancy animasjoner. Hvis det ' er det slags spill der du dør og blir katapultert tilbake til det siste kontrollpunktet, er det bare tid som er nødvendig for spilleren å mentalt tilbakestille og bli klar, så en enkel nedtelling og noe passende musikk / SFX for å sprøyte dem er nok.

Svar

Hvis du er ute etter en jevn bildeovergang, er det en kul og ekstremt enkel å implementere skyggelegging som ble brukt i Incredipede. I dette GDC 2013-samtalen forklarer kunstteamet det i detalj. Jeg har også implementert det i Unity. Hvis du vil se koden for å få ideen og oversette den til XNA, der er den:

Shader "Custom/InkPress" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _BlurTex ("Base (RGB)", 2D) = "white" {} } SubShader { Pass { //Usual post processing setup ZTest Always Cull Off ZWrite Off Fog { Mode off } CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 #include "UnityCG.cginc" struct v2f { float4 pos : POSITION; float2 uv : TEXCOORD0; }; v2f vert (appdata_img v) { v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.texcoord.xy; return o; } sampler2D _MainTex; sampler2D _BlurTex; float _threshold; float4 frag( v2f v ) : COLOR { // Step 1: Get the brightness of the blur texture float2 vUv = v.uv; float4 returnColour = float4(1.0 , 1.0 , 1.0 , 1.0); float3 texColour = tex2D(_BlurTex , v.uv).xyz; float bright = (texColour.r + texColour.g + texColour.b) / 3.0; //Step 2: Return the main texture pixel colour if its brightness is bellow //the threshold. Clear the pixel otherwise. if(bright < _threshold) { returnColour = tex2D(_MainTex , v.uv); } return returnColour; } ENDCG } } FallBack "Diffuse" } 

Skyggen ovenfor er bare overgangen. For å oppnå en bedre effekt, bør du gjøre bildet uskarpt som beskrevet i samtalen. Jeg har utelatt uskarphetsdelen for enkelhets skyld.

Hvis du vil ha mer detaljer og full kilde, kan du sjekke siden min .

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *