[ARHIIV] mängumeistrid
Pole sisse logitud. [Logi sisse ]
Mine lehekülje algusesse
Prinditav versioon | Telli teema e-mailile | Lisa lemmikutesse  
Mängu koormuse vähendamine...
Ker7
Level 2


Liitunud: 5.6.2009
Postitusi: 19
[EEMAL]




postitati 10.6.2009 19:33 Tsiteeri
Mängu koormuse vähendamine...



Tekkis küsimus, kuidas vähendada koormust kui ruumis on ikka üpris palju objekte ? Tiledena ma loodust ei saa eriti teha sest puudel on selline efekt et kui mees seal lähedal ja puu taga siis muutuvad puud veidi läbipaistvaks... Ma mõtlesin ise midagi sellist et kui objekt on playerist teatud kaugusel siis ta ei joonistagi spraiti vms, ma ei tea, aidake...

Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum Vaata kasutaja MSN-i
InCreator
baksjor!
Avatar

Liitunud: 18.12.2005
Postitusi: 1230
[EEMAL]




postitati 10.6.2009 19:42 Tsiteeri


Oleneb väga palju mängust endast. Et mis sul on ja kus ja kuidas.

Alati aitab, kui step event ja draw eventid on võimalikult lühikesed.
Üks võimalus on veel teha oma step-eventi kontroll alarmis, ja pikema aja tagant.

näiteks võtad step eventist kogu jama ära, ja paned selle hoopis alarm0 koodi.
Koodi lõppu kirjutad

alarm[0] = mingi number

mingi number on siis aeg, mille järel uuesti kontroll tehakse. Näiteks kui number on 1, tehakse igas stepis (et ongi nagu step event, kasutu), kui 2, iga 2 stepi tagant jne. 30 oleks siis üks kord sekundis (kui su room speed on 30). Ehk siis alarm0 käivitub, teeb mis vaja, ja paneb ennast uuesti mingi aja tagant käivituma.

Sellise ebaolulise asjaga nagu puud võib seda teha. Ta ei pea ju momentaalselt läbipaistvaks muutuma! Ja puu ei pea 30 korda sekundis üle kontrollima, kas mängija juba seisab tema taga.

Kui ta hakkab muutuma alles 2/30-dik sekundit hiljem (ehk number on 2) kui mängija selle taha astub, ei pane seda ükski normaalne inimene tähele. Võid isegi 15 panna, pool sekundit pole ka pikk reageerimisaeg. Objektilt aga oled juba kordades resursinõudmist vähendanud. Mitme puu peale on see väga tuntav, eriti aeglasel masinal. Pane room speediks 9999, käivita mäng F6-ga ja vaata debug akna servas fpsi, et kas aitab.

Ja see alarm[0] = number tuleb korra createsse ka panna, et tsükkel üldse käivituks peale puu tekitamist.

Kaugust saad ka teha lihtsalt. kogu draw eventi kood loogilistesse sulgudesse { } ja selle ette näiteks:

if (distance_to_object(mängijaobjektinimi) < soovitud kaugus)

Ka step/alarm0 eventi võid niimoodi tingimusse seada. Pole ju tarvis puul midagi kontrollida, kui mängija seda isegi ei näe hetkel, sest on liiga kaugel.

See juhend muidugi eeldab et sa kirjutad koodi, mitte ei mölla ikoonidega...
Emo2: InCreator
Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
Ker7
Level 2


Liitunud: 5.6.2009
Postitusi: 19
[EEMAL]




postitati 10.6.2009 20:12 Tsiteeri


Selge, tänan, kood on valmis, kohe proovis seda selle fps 9999-ga testida...

Puu ei kontrolligi kas ta on mehe taga, mees kontrollib ise kas ta on puu taga, aga jah see alpha muutumine küll.

EI NOH TORE, enne mingi täiega aretasin ja nyyd avastasin et seivitud pole. Jesss

Nonii, praegu mul muidugi nii palju objekt/puid veel pole kuid testimiseks panin neid omajagu ja kui muutsin selle alpha uuendamise stepi pealt alarm=5 peale ja sain fpsi 500-lt 700 peale...

Edit: Topeltpostide vältimiseks on meil "Muuda" nupp.
Crypton

Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum Vaata kasutaja MSN-i
valter
1


Liitunud: 19.1.2005
Postitusi: 1553
[EEMAL]




postitati 10.6.2009 20:52 Tsiteeri


Näe, palun ;)

http://www.dmgamez.pri.ee/foorum/viewthread.php?tid=2709&page=1#pid46939

http://www.dmgamez.pri.ee/GRONGO1/uss_walk.gif
Ralli I: dm11Veresaun III: dm11<br>Emo1: icedude, valter8bit I: võistlus kestabAktsioon III (2009): -<br>Aasta mäng 2009: Pilvemees, valter<br>Vabateema II: valter
Vaata kasutaja profiili Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum
InCreator
baksjor!
Avatar

Liitunud: 18.12.2005
Postitusi: 1230
[EEMAL]




postitati 11.6.2009 08:58 Tsiteeri


2.
Collision eventit ma tavaliselt ei kasuta. Haruharva on eventiga lihtsam, aga kindlasti on kiirem collision eventi (mis pixel perfect-spritega on veel ERITI nõudlik) asemel määratleda oma tegelasel näiteks 2-3 punkti, ja teha punktipõhist kontrolli.


Näiteks kui tegelane on küljeltvaates, ja tegu on puudega, võib kontrollida pidevalt punkti ühe ja teise kinga juures.

if (position_meeting(tegelane.x+vajalik kingani, tegelelane.y + vajalik kingani, puu))
{
puudutatudpuu = instance_position(tegelane.x+vajalik kingani, tegelelane.y + vajalik kingani, puu)
with (puudutatudpuu)
{
... puu alpha muutmise kood.
"puudutatudpuu" muutuja hoiab juba selle kindla puu objekti id-d ja peale with käsku, koodi nagu teeksid koodi puu step eventisse, muutujad on juba puu, mitte mehe omad (olgugi et mehe koodis oled ikka). With-käsust on juttu õpetustes palju, uuri juurde.
}
}

vajalik-kingani jama väärtused saad sprite editorist.
Kui sul on joonistatud näiteks 32x32 sprite, origin on (15,15) - ehk keskel - ja parem kinganina on punktis (31,30)...
(selle leiad, kui nihutad näiteks pliiatsi tööriista spritet tehes vajalikule pikslile ja ekraani alaservas näitab koordinaate)
...siis tegelase x-le pead lisama järelikult 31-15 = 16 ja y-le 30-15 = 15 ehk kinganina kaugus origin-punktist

Ehk koodis oleks collision punkti koordinaadid (tegelane.x + 16, tegelane.y + 15) või lihtsamalt (x+16,y+15)

Tahab natuke loogikat, aga lihtne teha.
Emo2: InCreator
Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
Kazpar
$ QliMax $
Avatar

Liitunud: 27.3.2009
Postitusi: 507
[EEMAL]




postitati 12.6.2009 18:58 Tsiteeri


Step panna mingi alarmi tagant tööle on parim, mul suuremal mängul tõusis selle abil 20 fps-ilt 300-le. No ja need steppi koodid olid kilomeetri pikkused ka muidugi
Vabateema II: valter
Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum

Hetkel loevad seda teemat:
Mitte ühtegi - 1 külaline

Mine lehekülje lõppu





Foorumi algbaas põhineb XMB mootoril, modifitseeritud Valter Pundi poolt
Kodulehekülg on tehtud Valter Pundi poolt vpundi ät gmail punkt komm