I ”m arbetar med ett 2D-spel för WPF8 med XNA 4.0.

Allt går bra, men det är för snabbt. Jag undrade bara, vad kunde jag göra mellan slutet av spelet och poängskärmen, och innan spelet startar? Jag letar efter ett exempel på hur man gör det (svart skärm med ”laddning” skriv i Windows-telefonstil) eller ett sätt att implementera det.

Kommentarer

  • Varför visa en laddningsskärm när den är helt onödig? Varför gör ' t du bara gör en smidig övergång?
  • Ja, det är också en lösning, men jag hittade ' inte något sätt att göra det. Som ett bibliotek med övergångsanimering.

Svar

Ingen kod från mig, eftersom jag inte är så erfaren med XNA, men detta är mer ett allmänt ”problem”:

  • Först och främst – som nämnts i kommentarerna – lägg inte till (aldrig någonsin!) Falska laddningsskärmar! Folk kommer att tycka att det verkligen är så resurstungt som kan visa din app i ett sämre ljus än vad den egentligen borde vara. Speciellt på mobilen litar du vanligtvis inte på en app som visar skärmar med konstant laddning till säkert batteri.

  • Lägg istället till en övergång. En mycket lätt att göra övergång skulle vara att blanda till / från svart. Du kan göra mer intressanta saker när du använder shaders och renderar till textur, men den här bör vara mer än tillräcklig för att sakta ner tempot lite.

De grundläggande stegen är ganska mycket självförklarande och det finns flera sätt att närma sig detta, också beroende på hur du hanterar ditt speltillstånd, framsteg osv.

  • I stället för att byta speltillstånd omedelbart, t.ex. från GAME_PLAYING till GAME_HIGHSCORE, skulle du ställa in en räknare. Låt oss kalla det blending_time.
  • Därifrån, så länge som blending_time inte är lika med noll, ritar du bara en svart fyrkant över hela skärmen med en alfavärde baserat på den återstående tiden.
  • När räknaren når noll gör du tillståndsväxlingen.
  • För att få en mjuk blandning kan du sedan vända hela saken .
  • Sätt igen blending_time till den tid du vill blanda (du kanske vill använda ett annat värde eller någon växling för att identifiera om du blandar till eller från svart).
  • Så länge blending_time inte är ”t 0, skulle du än en gång rita en svart fyrkant över hela scenen med dess alfa beroende på tiden kvar (den här gången med 100% ogenomskinlig).

Kommentarer

  • Överens, men tänk också på om du verkligen har inget att göra den här tiden. Vissa spel ger höga poäng till en server, andra visar reklam, andra visar snygga animationer. Om det ' är den typ av spel där du dör och blir katapulterad till den sista kontrollpunkten, behövs det bara tid för spelaren att mentalt återställa och göra sig redo, så en enkel nedräkning och lite lämplig musik / SFX för att hype upp dem räcker.

Svar

Om du letar efter en smidig bildövergång, det finns en cool och extremt lätt att implementera skuggning som användes i Incredipede. I detta GDC 2013-samtal förklarar konstteamet det i detalj. Jag har också implementerat det i Unity. Om du vill se koden för att få idén och översätta den till XNA, där är 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" } 

Shader ovan är bara övergången. För att uppnå en bättre effekt bör du suddiga bilden innan som anges i samtalet. Jag har utelämnat suddighetsdelen för enkelhetens skull.

Om du vill ha mer information och fullständig källa kan du kolla min sida .

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *