Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
ghost

Re: Tyhmät kysymykset (I/2010)

Post by ghost »

mite teen tyypeille törmäyksen tunnistuksen?

Code: Select all

setupcollision vihollinen\obj,vihollinen\obj,2,2,2
Tosta tulee mav,nii miten sitten teen sen?
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Tyhmät kysymykset (I/2010)

Post by Wingman »

ghost wrote:mite teen tyypeille törmäyksen tunnistuksen?

Code: Select all

setupcollision vihollinen\obj,vihollinen\obj,2,2,2
Tosta tulee mav,nii miten sitten teen sen?
tuossa asetat törmäyksen samaan objektiin->MAV.

Code: Select all

for vihu2.vihutyyppi =each vihutyyppi
setupcollision vihu/obj, vihu2/obj, 2,2,2
next vihu2
- - - -
ghost

Re: Tyhmät kysymykset (I/2010)

Post by ghost »

ei taida toimii noinkaa koska nyt se törmäyksen tarkistus on vihu2\obj ja vihu\obj,mut mite saan kaikille vihuille ettei ne mee päällekkäin
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion »

ghost wrote:ei taida toimii noinkaa koska nyt se törmäyksen tarkistus on vihu2\obj ja vihu\obj,mut mite saan kaikille vihuille ettei ne mee päällekkäin

Code: Select all

// Käydään kaikki viholliset läpi ja asetetaan jokaiselle
// törmäystunnistus muiden vihollisten kanssa.
For vihu.VIHOLLISET = Each VIHOLLISET
    // Asetetaan törmäysvihu-muuttujaan tällä kierroksella
    // mentävän vihun jälkeen VIHOLLISET-kokoelmassa tuleva
    // vihollinen.
    törmäysvihu.VIHOLLISET = After( vihu )
    While törmäysvihu <> NULL
        // Niin pitkään kuin törmäysvihu-muuttuja osoittaa
        // johonkin VIHOLLISET-kokoelman jäseneen, voidaan
        // sille ja For-loopin "vihu"-jäsenelle asettaa
        // törmäystunnistus.
        SetupCollision vihu\obj, törmäysvihu\obj, 2, 2, 2
        SetupCollision törmäysvihu\obj, vihu\obj, 2, 2, 2
        // Siirrytään tarkastelemaan seuraavaksi listassa
        // olevaa vihollista
        törmäysvihu = After( törmäysvihu )
    Wend
Next vihu

// Eli esimerkiksi sinulla on viholliset 1,2,3,4,5. Tällöin
// For vihu.VIHOLLISET kohdassa "vihu" muuttujaan asetetaan
// vihollinen 1, ja törmäysvihu.VIHOLLISET = After( vihu )
// muuttujaan asetetaan vihollinen 2. Tämän jälkeen näille
// vihollisille asetetaan keskenään törmäystarkistus:
// SetupCollision vihu\obj, törmäysvihu\obj tarkoittaisi siis
// että asetetaan vihollisen 1 ja vihollisen 2 objekteille
// törmäykset.
// 
// Sitten sen jälkeen asetetaan törmäysvihu-muuttuja osoittamaan
// seuraavaan VIHOLLISET-kokoelman jäseneen, eli viholliseen 3.
// Tällöin törmäys asetetaan vihollisen 1 ja vihollisen 3 välille.
// 
// Seuraavaksi törmäysvihu on vihollinen 4, ja törmäys asetetaan
// viholliselle 1 ja viholliselle 4. Tämän jälkeen törmäysvihu
// asetetaan viholliseksi 5 ja sama homma tapahtuu uudelleen.
//
// Nyt kun vihollisen 5 jälkeen ei enää tule vihollisia, on
// "törmäysvihu" muuttujan arvo NULL, eli se ei osoita mihinkään
// kokoelman jäseneen, jolloin While-silmukaan ei enää mennä.
// Seuraavaksi hypätää "Next vihu" kohdassa siihen, että "vihu"
// muuttuja osoittaa viholliseen 2, ja törmäysvihu sitten
// viholliseen 3. Sitten näille kahdelle asetetaan törmäys, ja
// muuteaan "törmäysvihu" osoittamaan viholliseen 4 ja niin edelleen.
//
// Näin saadaan jokaiselle viholliselle keskenään törmäystarkistus,
// eikä niille tule vahingossa tuplamäärä tarkistuksia (kuten jos
// käytettäisiin kahta sisäkkäistä For-Each silmukkaa).
EDIT:

Unohdin että SetupCollision asettaa törmäykset vain yhteen suuntaan. Sitä kun tulee niin harvoin käytettyä, HC-koodarit pelaa koordinaateilla ja matematiikalla.

Last edited by valscion on Wed Jan 05, 2011 11:43 pm, edited 1 time in total.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Tyhmät kysymykset (I/2010)

Post by MaGetzUb »

Code: Select all

For vihu.Vihut = Each Vihut
     For vihu2.Vihut = Each Vihut
          If vihu <> vihu2 Then
               SetupCollision vihu\obj, vihu2\obj, 2, 2, 2
               SetupCollision vihu2\obj, vihu\obj, 2, 2, 2
         Endif
     Next vihu2
Next vihu
Last edited by MaGetzUb on Wed Jan 05, 2011 9:40 pm, edited 1 time in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by SPuntte »

MaGetzUb wrote:

Code: Select all

For vihu.Vihut = Each Vihut
     For vihu2.Vihut = Each Vihut
          SetupCollision vihu\obj, vihu2\obj, 2, 2, 2
          SetupCollision vihu2\obj, vihu\obj, 2, 2, 2
     Next vihu2
Next vihu
Ei näin.

Oletetaan, että meillä on instanssit A, B, C. Alussa vihu = A ja vihu2 = A, joten ensimmäiset SetupCollision-kutsut asettavat törmäykset A -> A sekä A -> A. Pieleen menee.

Lisäksi huomataan, että toisella vihu2:n iteraatiolla vihu = A ja vihu2 = B. No ei tässä vielä mitään, mutta entäs sitten, kun onkin näin: vihu = B, vihu2 = A? Sama asia tehdään toiseen kertaan. Taas menee pieleen.

Tuossa käydään läpi kaikki permutaatiot, kun pitäisi käydä läpi vain kaikki kombinaatiot. VesQ:n tapa on muuten oikea, mutta siinä törmäys asetetaan vain yhteen suuntaan, eli mielivaltaisesta vihuparista vain listassa "ylempänä" oleva voi törmätä toiseen osapuoleen. Ongelman voi korjata helposti lisäämällä toisinpäisen törmäyksen asettavan SetupCollision-käskyn.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Tyhmät kysymykset (I/2010)

Post by MaGetzUb »

SPuntte wrote:
MaGetzUb wrote:

Code: Select all

For vihu.Vihut = Each Vihut
     For vihu2.Vihut = Each Vihut
          SetupCollision vihu\obj, vihu2\obj, 2, 2, 2
          SetupCollision vihu2\obj, vihu\obj, 2, 2, 2
     Next vihu2
Next vihu
Ei näin.
Tuossa käydään läpi kaikki permutaatiot, kun pitäisi käydä läpi vain kaikki kombinaatiot. VesQ:n tapa on muuten oikea, mutta siinä törmäys asetetaan vain yhteen suuntaan, eli mielivaltaisesta vihuparista vain listassa "ylempänä" oleva voi törmätä toiseen. Ongelman voi korjata helposti lisäämällä toisinpäisen törmäyksen asetavan SetupCollision-käskyn.

Oletetaan, että meillä on instanssit A, B, C. Alussa vihu = A ja vihu2 = A, joten ensimmäiset SetupCollision-kutsut asettavat törmäykset A -> A sekä A -> A. Pieleen menee.

Lisäksi huomataan, että toisella vihu2:n iteraatiolla vihu = A ja vihu2 = B. No ei tässä vielä mitään, mutta entäs sitten, kun onkin näin: vihu = B, vihu2 = A? Sama asia tehdään toiseen kertaan. Taas menee pieleen.
Joo huomasinkin etten ollut laittanut ehtoa väliin, hienoa kun ei tullut ajateltua kirjoitin vaan.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Tuxi
Active Member
Posts: 190
Joined: Wed Jan 21, 2009 10:25 pm
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Tuxi »

MaGetzUbin koodi korjattuna:

Code: Select all

For vihu.Vihut = Each Vihut
     For vihu2.Vihut = Each Vihut
          If vihu <> vihu2 Then SetupCollision vihu\obj, vihu2\obj, 2, 2, 2
     Next vihu2
Next vihu
Projektit:
Jotain pientä (Ehkä vähän suurempaakin)

-Tuxi- (myös Tuxi4321)
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion »

SPuntte wrote:VesQ:n tapa on muuten oikea, mutta siinä törmäys asetetaan vain yhteen suuntaan, eli mielivaltaisesta vihuparista vain listassa "ylempänä" oleva voi törmätä toiseen osapuoleen. Ongelman voi korjata helposti lisäämällä toisinpäisen törmäyksen asettavan SetupCollision-käskyn.
Jeps, korjasinkin ongelman jo. Ei oo vaan aikoihin tullut temppuiltua SetupCollisionin kanssa niin tuppaa unohtumaan se, että törmäykset asetetaan vain yhteen suuntaan.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Tyhmät kysymykset (I/2010)

Post by MaGetzUb »

Eikö vihollisten kannattaisi kaikkien törmätä toisien kanssa? Niin sitten ne eivät lähtisi liukumaan seinien lävitse.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion »

MaGetzUb wrote:Eikö vihollisten kannattaisi kaikkien törmätä toisien kanssa? Niin sitten ne eivät lähtisi liukumaan seinien lävitse.
...niinhän ne tekevätkin?
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Tyhmät kysymykset (I/2010)

Post by Pate5 »

Tuxi wrote:MaGetzUbin koodi korjattuna:

Code: Select all

For vihu.Vihut = Each Vihut
     For vihu2.Vihut = Each Vihut
          If vihu <> vihu2 Then SetupCollision vihu\obj, vihu2\obj, 2, 2, 2
     Next vihu2
Next vihu
Koodissasi viholliset törmäävät edelleenkin vain yhteen suuntaan, mikä taidettiinkin mainita pariin kertaan.
CoolBasic henkilökuntaa
Graafikko
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez »

Pate5, en ymmärrä mihin koodiin nyt viittaat... Mutta selvennyksenä henkilölle joka alunperin esitti kysymyksen SetupCollisionista:

VesQ:n koodi, jonka hän korjasi jossain välissä:

Code: Select all

For vihu.VIHOLLISET = Each VIHOLLISET
    // Asetetaan törmäysvihu-muuttujaan tällä kierroksella
    // mentävän vihun jälkeen VIHOLLISET-kokoelmassa tuleva
    // vihollinen.
    törmäysvihu.VIHOLLISET = After( vihu )
    While törmäysvihu <> NULL
        // Niin pitkään kuin törmäysvihu-muuttuja osoittaa
        // johonkin VIHOLLISET-kokoelman jäseneen, voidaan
        // sille ja For-loopin "vihu"-jäsenelle asettaa
        // törmäystunnistus.
        SetupCollision vihu\obj, törmäysvihu\obj, 2, 2, 2
        SetupCollision törmäysvihu\obj, vihu\obj, 2, 2, 2
        // Siirrytään tarkastelemaan seuraavaksi listassa
        // olevaa vihollista
        törmäysvihu = After( törmäysvihu )
    Wend
Next vihu
Sekä Tuxin koodi, joka taitaa olla paljon yleisemmin käytetty:

Code: Select all

For vihu.Vihut = Each Vihut
     For vihu2.Vihut = Each Vihut
          If vihu <> vihu2 Then SetupCollision vihu\obj, vihu2\obj, 2, 2, 2
     Next vihu2
Next vihu
Molemmat koodit asettavat vain ja ainoastaan törmäyksen jokaisen jäsenen välille, molemminsuuntaisesti. VesQ:n koodi on monissa tapauksissa ylivertainen, mutta tässä tapauksessa ei koodeissa taida olla suorituskyvyn kannalta eroa.

Ja MaGetzUbille: en tiedä yhtäkään tapaa miten voisi satavarmasti estää objektin liukumisen tilekartan sisään. Molemminsuuntaisessa törmäyksessä on toisella objektilla aina etuajo-oikeus, jonka takia kolmen eri objektin (tai ainakin kartan) puristuksessa aina yksi objekti liukuu toisen objektin (kartan) yli.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
pietari-poika
Newcomer
Posts: 16
Joined: Wed Oct 10, 2007 9:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by pietari-poika »

Aloittelin huvikseni pienen ylhäältäkuvatun räiskintäpelin tekoa ja nyt tuli taidot vastaan, eli kaipaisin jonkinsortin apua seuraavien asioiden toteutukseen liittyen. Pelini on siis perus-ylhäältäkuvattu räiskintä, jossa tilemappi (hit kerrokset seinää jne.), hiiri+näppis -ohjaus ja ammukset toteutettu tyypeillä. Botteja en ole vielä alkanut koodaamaan, luultavasti toteutan ne tyypeillä.

1. Varjot (tai joku juttu ihan sama mikä) ruudulle kohtiin joita pelaaja ei näe.
Idea on siis, että pelaaja ei näkisi vihollisia, jotka ovat seinän takana. Tämä on helppo toteuttaa yksinkertaisesti piilottamalla vihollisobjektit, kun pelaaja ei näe niitä (Objectsight). Nyt pitäisi kuitenkin saada joku systeemi, josta näkisi yksiselitteisesti, mitä alueita pelihahmo näkee ja mitä ei. Esimerkiksi näkymättömissä olevien paikkojen tummennus jotenkin tähän tyyliin...? Mites tällaisen saisi järkevimmin toteutettua? Joskus väsäsin systeemin, jossa näyttö oli täynnä pieniä mustia kuvia, jotka menivät pois näkyvistä jos pelaaja näki ne. Se systeemi oli melko ruma ja lisäksi aivan mahdoton järkyttävän fps-dropin takia.

2. Eri resoluutiot ja pelin skaalautuminen.
Pelissä olisi hyvä jos se toimisi monella eri resoluutiolla. Reson vaihtohan käy helposti SCREEN-komennolla, mutta ongelma on se, että tällöin isommalla resolla pelaajan näköala kasvaa ja vastaavasti pienemmällä resoluutiolla pienenee. Miten saisin pelin toimimaan monella eri resolla siten, että objektit ja tilemapit sun muut olisivat aina samassa skaalassa suhteessa näytön kokoon?

EDIT:
3. Mistä löydänkään sen koodin jossa on parempi vaihtoehto framelimit-komennolle?
User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Tyhmät kysymykset (I/2010)

Post by Peltsi »

Morjens! Yksinkertaisessa bottiviritelmässä on jotain häikkää: nimittäin botti ampuu vain kun se EI näe pelaajaa ja nähdessään vihollisen (pelaaja) se suuntaa sitä kohti mutta ei ammu... Kuinka saan botin ampumaan kun se huomaa pelaajan? Kohdan

Code: Select all

 Else  If reload1=0 Then 
poisto varmaan auttaisi mutta botin ammunta olisi liian nopeaa.
Tässä vielä koodinpätkä botin ampumisjutuista:

Code: Select all

           If Lower (kok$) = "y" Then
                PaintObject ukkeli,bot
                PlayObject ukkeli,0,4
                PointObject ukkeli,ukko
                If ObjectSight(ukkeli,ukko) Then
                    MoveObject ukkeli,3
                    Else 
                    If reload1=0 Then
                        PlaySound "Tiedostot\Machine Gun 1.wav",100
                        luoti.AMMUS = New(AMMUS)
                        luoti\obj=CloneObject(pati)
                        CloneObjectPosition luoti\obj,ukkeli
                        CloneObjectOrientation luoti\obj,ukkeli
                        reload1=20 'Luodin lataus nopeus
                    EndIf
                    EndIf
                    
                    If reload1>0 Then reload1=reload1-1
                    
                    For luoti.AMMUS = Each AMMUS
                        MoveObject luoti\obj,20 'Luodin lento nopeus
                        If ObjectsOverlap (ukko,luoti\obj) Then
                            ObjectInteger ukko,ObjectInteger(ukko) -2'Luodin hittaus
                            DeleteObject luoti\obj
                            Delete luoti
                        ElseIf GetMap( 2, ObjectX(luoti\obj), ObjectY(luoti\obj) ) Then
                            DeleteObject luoti\obj
                            Delete luoti
                        EndIf
                    Next luoti
                EndIf
            EndIf
Kiitos ja kumarrus jo etukäteen vaivannäöstä! :)
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by DJ-Filbe »

Jos haluat että botti ampuu silloin kun näkee pelaajan, ehtolauseessa on virhe. Sinun pitää tehdä päinvastoin, eli lisää ehtolauseen alkuun NOT -avainsana.

Code: Select all

...
If NOT ObjectSight(ukkeli,ukko) Then
...
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2010)

Post by naputtelija »

pietari-poika wrote: Esimerkiksi näkymättömissä olevien paikkojen tummennus jotenkin tähän tyyliin...? Mites tällaisen saisi järkevimmin toteutettua?
Tämä voisi auttaa.
pietari-poika wrote: 2. Eri resoluutiot ja pelin skaalautuminen.
Pelissä olisi hyvä jos se toimisi monella eri resoluutiolla. Reson vaihtohan käy helposti SCREEN-komennolla, mutta ongelma on se, että tällöin isommalla resolla pelaajan näköala kasvaa ja vastaavasti pienemmällä resoluutiolla pienenee. Miten saisin pelin toimimaan monella eri resolla siten, että objektit ja tilemapit sun muut olisivat aina samassa skaalassa suhteessa näytön kokoon?
Näin isommille resoille.
EDIT:
pietari-poika wrote:3. Mistä löydänkään sen koodin jossa on parempi vaihtoehto framelimit-komennolle?
SDK:sta.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2010)

Post by naputtelija »

Ja nyt kun yritin värkätä jonkinmoista AI-zyzdeemiä, niin seinä tuli heti vastaan. Ukko, jonka pitäisi älykkäästi seurata pelaajaa, liikkuu minne sattuu. Systeemi perustuu siihen, että joka kerta kun ukko näkee pelaajan, se rekisteröi last-seen-pisteen ja kun pelaaja katoaa näkyvistä, se liikkuu lastseeniä kohti kunnes näkee pelaajan. Mutta kun niin se ei tee.
Any help?

Code: Select all

FrameLimit 40 'rajoita nopeutta
Include "SDK/include/cbTimer.cb"
Include "cbMap.cb"
tim=InitFlipFlopTimer(500)
MapLoad("Media\cdm2.til","Media\tileset.bmp")
PlayObject gCurrentMap,0,0,1

ukko = LoadObject ("Media\guy.bmp",72)
ukko2=CloneObject(ukko)
SetupCollision ukko,gCurrentMap,2,4,2
SetupCollision ukko2,gCurrentMap,2,4,2
PositionObject ukko2,0,200

Repeat
    UpdateTimer()
    'Ukon ohjaus
    If LeftKey() Then TurnObject ukko,5
    If RightKey() Then TurnObject ukko,-5
    If UpKey() Then MoveObject ukko,2
    If DownKey() Then MoveObject ukko,-2
    If Not Distance2(ukko,ukko2)<50 Then
        If ObjectSight (ukko,ukko2) Then
            MoveObject ukko2,1.5
            If GetTimerData(tim) Then
                lastseenx=GetTileX(ObjectX(ukko))
                lastseeny=GetTileY(ObjectY(ukko))
            EndIf
            PointObject ukko2,ukko
        Else
            an=GetAngle(ObjectX(ukko2), ObjectY(ukko2), GetTileWorldX(lastseenx), GetTileWorldY(lastseeny))
            If Not done Then RotateObject ukko2,an
            MoveObject ukko2,1.5
            done=1
        EndIf
    EndIf
    
    DrawGame
    Text 0,0, Int(GetAngle2(ukko,ukko2))
    Text 0,20, Int(ObjectAngle(ukko2))
    CloneCameraPosition ukko

    DrawScreen

Forever 
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez »

Maailmakoordinaatteja käytettäessä täytyy muistaa flipata y-akseli:

Code: Select all

an=GetAngle(ObjectX(ukko2), -ObjectY(ukko2), GetTileWorldX(lastseenx), -GetTileWorldY(lastseeny))
Ja syy miksi koodisi näytti toimivan muilla paitsi ensimmäisellä katoamiskerralla johtuu siitä, ettet nollaa muuttujaa done aina kun vihu näkeekin ukon.

Miksi ... If Not Distance2(ukko,ukko2)<50 Then ... ei ole yksinkertaisesti ... If Distance2(ukko,ukko2) >= 50 Then ...?

Edit.
Olet varmasti vasta testailemassa erilaisia tyylejä vihollisen tekoälylle, mutta vaikuttaisi siltä että tämä ei ole kovin tehokas tapa. Joskus vihollinen näkee seinän takaiset koordinaatit, jolloin esim. pylväiden tapauksissa vihollisen akseli menee pystysuoraksi seinään nähden, eli edes pientä sivuttainliikkumista ei tapahdu. Tämä johtaa jumitukseen.

Yksi tapa on tehdä joko reaaliaikainen pathfinder, tai sitten käyttää waypointteja, jolloin vain etsitään lyhyin reitti pisteeseen missä pelaaja viimeksi nähtiin. Tämän lisäksi, jos pelaajaa ei enää näy koordinaateissa jossa se viimeksi nähtiin, jatketaan normaalia random-liikkumista.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
pietari-poika
Newcomer
Posts: 16
Joined: Wed Oct 10, 2007 9:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by pietari-poika »

naputtelija wrote:
pietari-poika wrote: Esimerkiksi näkymättömissä olevien paikkojen tummennus jotenkin tähän tyyliin...? Mites tällaisen saisi järkevimmin toteutettua?
Tämä voisi auttaa.
Toi vaikuttaa varsin hyvältä. Tosin kun fovin kasvattaa tossa 360 asteeseen niin tossa default laatuasetuksella systeemin epätarkkuus kasvaa käsittämättömän suureksi. Sitten kun kasvatan qualityä suhteessa laskettavan alueen määrään, niin fps tippuu sieltä kuudestakympistä johonkin noin kymmeneen, mikä tekee homman mahdottomaksi. Lisäksi toi vähän bugaa kun pelaajaa kääntää paikallaan, joten ehkä voisin yrittää tehdä jotain optimointia. Nyt kun kyseessä on 360 asteen kokoinen alue eikä vain sektori, pelaajaobjektia ei tarvitsisi käyttää alueen skannaamiseen vaan sen voisi toteuttaa erillisellä, piilotetulla objektilla, jolloin tuo paikallaan kääntymiseen liittyvä bugi katoaisi. Pitänee perehtyä ton koodinpätkän sielunelämään ja kokeilla jos sieltä saisi jotain karsittua...

BTW luin jostain aiheesta täältä foorumeilta, että coolbasicissa funktioiden kutsussa olisi jotain nopeushaittaa paljonkin...? Tossa koodissa on pari funktiota, eli jos ne toteuttaisi normikoodin seassa, niin voisiko tossa mahdollisesti tulla merkittävästi nopeutta lisää?
naputtelija wrote:
pietari-poika wrote: 2. Eri resoluutiot ja pelin skaalautuminen.
Pelissä olisi hyvä jos se toimisi monella eri resoluutiolla. Reson vaihtohan käy helposti SCREEN-komennolla, mutta ongelma on se, että tällöin isommalla resolla pelaajan näköala kasvaa ja vastaavasti pienemmällä resoluutiolla pienenee. Miten saisin pelin toimimaan monella eri resolla siten, että objektit ja tilemapit sun muut olisivat aina samassa skaalassa suhteessa näytön kokoon?
Näin isommille resoille.
Vaikuttaa hieman hankalalta... Ehkä tässä vaiheessa pitäydyn vielä yhdessä resoluutiossa ja käytän peliä vaikka ikkunoituna.
naputtelija wrote:
pietari-poika wrote:3. Mistä löydänkään sen koodin jossa on parempi vaihtoehto framelimit-komennolle?
SDK:sta.
Ok, thanks, pitää kattella tota. Muistelin vaan että joku olisi kirjoittanut joskus sellaisen muutaman (~10?) rivin framelimitterin, jonka pitäisi toimia paremmin kuin cb:n oma. Käsittääkseni siinä toimintaperiaate oli kuitenkin sama, eli pelin ajan mitta on edelleen frame (eikä "oikea aika") mutta toimii paremmin kuin cb:n oma.
Locked