I ”m työskentelemällä WDF8: n 2D-pelin parissa XNA 4.0: n avulla.
Kaikki sujuu hyvin, mutta se on liian nopeaa. Mietin vain, mitä voisin tehdä pelin lopun ja pisteet-näytön välillä ja ennen pelin alkua? Etsin näytettä siitä, miten se tehdään (musta näyttö, jossa ”ladataan”, kirjoitetaan Windows Phone -tyyliin) tai tapaa toteuttaa se.
Kommentit
- Miksi latausnäyttö näytetään, kun se on täysin tarpeetonta? Miksi et ' t tee vain tasaista siirtymistä?
- Joo, että myös ratkaisua, mutta en löytänyt ' ei mitään tapaa tehdä sitä. Kuten kirjasto, jossa on siirtymäanimaatio.
Vastaa
Ei koodia minulta, koska en ole kokenut XNA: ta, mutta tämä on enemmän yleinen ”ongelma”:
-
Ensinnäkin – kuten kommenteissa mainitaan – älä (koskaan koskaan!) Lisää väärennettyjä latausnäyttöjä! Ihmiset ajattelevat, että se on todella raskas resurssi, joka voi näyttää sovelluksesi huonommassa valossa kuin sen todellisuudessa pitäisi olla. Varsinkin mobiililaitteissa et yleensä luota sovellukseen, joka näyttää jatkuvasti latausnäyttöjä turvalliselle akulle.
-
Lisää sen sijaan siirtymä. Erittäin helppo siirtyminen olisi sekoittaminen mustaan / mustaan. Voit tehdä mielenkiintoisempia asioita käytettäessä varjostimia ja renderöintiä tekstuuriksi, mutta tämän pitäisi olla enemmän kuin riittävä hidastaa vauhtia hieman.
Perusvaiheet ovat melko paljon itsestään selittävä ja tähän on useita tapoja, riippuen myös siitä, kuinka hoidat pelitilasi, edistymisesi jne.
- Sen sijaan, että vaihdat pelitilaa välittömästi, esim.
GAME_PLAYING
–GAME_HIGHSCORE
, sinun tulisi asettaa jokin laskuri. Anna sen kutsua sitäblending_time
. - Sieltä eteenpäin, niin kauan kuin
blending_time
ei ole yhtä suuri kuin nolla, piirtät vain mustan nelikulmion koko ruudulle käyttämällä alfa-arvo jäljellä olevan ajan perusteella. - Kun laskuri saavuttaa nollan, teet tilakytkimen.
- Saadaksesi pehmeän sulautumisen, voit sitten kääntää koko asian .
- Aseta uudelleen
blending_time
siihen aikaan, jonka haluat sekoittaa (haluat ehkä käyttää erilaista arvoa tai jotakin kytkintä tunnistaaksesi, sekoitetaanko vai ei musta). - Niin kauan kuin
blending_time
ei ole ”t 0”, piirrät jälleen kerran mustan nelikon koko näkymän alfalla kellonajasta riippuen. vasemmalle (tällä kertaa alkaen 100% läpinäkymättömästä).
Kommentit
- Hyväksytty, mutta mieti myös, oletko todella ei ole mitään tekemistä tänä aikana. Jotkut pelit lähettävät korkeita tuloksia palvelimelle, toiset näyttävät mainontaa, toiset näyttäviä animaatioita. Jos se ' on sellainen peli, jossa kuolet ja pääset katapultoitumaan takaisin viimeiseen tarkistuspisteeseen, aikaa tarvitaan vain, jotta pelaaja voi henkisesti nollata ja valmistautua, joten yksinkertainen laskenta jonkinlainen sopiva musiikki / SFX niiden hyppäämiseen riittää.
Vastaa
Jos etsit tasaista kuvansiirtona on viileä ja erittäin helposti toteutettava varjostin, jota käytettiin Incredipedessä. Tässä GDC 2013 -puhelussa taidetiimi selittää sen yksityiskohtaisesti. Olen myös toteuttanut sen Unityssä. Jos haluat nähdä koodin saadaksesi idean ja kääntääksesi sen XNA: ksi, siinä se on:
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" }
Yllä oleva varjostin on vain siirtymä. Paremman vaikutuksen saavuttamiseksi sinun tulisi hämärtää kuva ennen puheessa mainittua. Olen jättänyt hämärtämisen osan yksinkertaisuuden vuoksi.
Jos haluat lisätietoja ja täydellisen lähteen, voit tarkistaa sivuni .