Vihujen sijoitus datakerroksen avulla

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 9:25 am

Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 » Tue Apr 29, 2008 7:14 pm

Eli, pitäis saada silleen et käydään kartta läpi ja jos tulee datakerros jossa on vaikka 1 niin luodaan uusi vihu ja laitetaan se siihen paikkaan missä data on.

Olen kokeillut tälläistä:

Code: Select all

Type VIHUT
    Field pahis
EndType


vihollinen=LoadObject("media/soldier.bmp")
ShowObject vihollinen,OFF

For x=1 To MapWidth()
    For y=1 To MapHeight()
    
        If GetMap2(3,x,y)=1 Then
            
            vihu.VIHUT = New(VIHUT)
            vihu\pahis=CloneObject(vihollinen)
            PositionObject vihu\pahis,x,y
        
        EndIf
    
    Next y
Next x
Ja tietysti sitten joku kartta pitää ladata mutta en nyt laittanut tohon koska cmd.til ei sisällä tietääkseni dataa..?

Henkru
Advanced Member
Posts: 359
Joined: Sun Aug 26, 2007 2:46 pm

Re: Vihujen sijoitus datakerroksen avulla

Post by Henkru » Tue Apr 29, 2008 7:18 pm

Testaappa tämmöistä. Koska MapHeight() ja MapWidth() palauttavat korkeuden ja pituuden tilejen määränä.

Code: Select all

PositionObject vihu\pahis, x * TILEN LEVEYS , y * TILEN KORKEUS

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: Vihujen sijoitus datakerroksen avulla

Post by Aavesoturi » Tue Apr 29, 2008 9:04 pm

Huomatkaapas sekin, että objektien koordinaatistossa 0,0 on yleensä kartan keskellä, eli koordinaatteihin pitää lisätä/vähentää vielä ObjectSizeX(map)/2 ja sama y:lle

User avatar
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 9:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 » Tue Apr 29, 2008 9:21 pm

Nyt toimii jokseenki oikein mutta heittää vihut peilikuvana eli jos ylhäällä pitäs olla vaikka kolme vihuu ja alhaalla kaks ni meneeki päinvatsoin..

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: Vihujen sijoitus datakerroksen avulla

Post by Aavesoturi » Tue Apr 29, 2008 10:27 pm

Sly_Jack0 wrote:Nyt toimii jokseenki oikein mutta heittää vihut peilikuvana eli jos ylhäällä pitäs olla vaikka kolme vihuu ja alhaalla kaks ni meneeki päinvatsoin..
Swappaa y-akseli tai jos vaikka lisäät y:hyn tuon ObjectSizeY(map)/2, niin laitakin että se vähennetään. Ts. johonkin sopivaan kohtaan muutat plussan miinukseksi tai toisin päin.

User avatar
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 9:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 » Wed Apr 30, 2008 2:37 pm

Vähennän normaalisti siitä objectsizey(kartta) mutta jos muutan sen plussaks ni vihut menee ihan liian ylös

EDIT: Sain toimiin... Kiitoksia teille avusta!

User avatar
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 9:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 » Fri May 02, 2008 2:51 pm

Toinen ongelma... Pitäis saada mulla on type-vihuilla semmone tekoäly että ne vaihtaa suuntaa aina kun ne osuu seiniin ja jos ne näkee pelaajan ne kääntyy sitä kohti ja alkaa ampua. Ongelma on kuitenkin siinä että kun yks vihu huomaa pelaajan niin muut kävelee vaan eteenpäin eikä vaihda enää suuntaa. Tässä koodia:

Code: Select all

     For vihu.VIHUT=Each VIHUT
        MoveObject vihu\pahis,2
        
        
        If CountCollisions(vihu\pahis) And sight=0 Then
            turnObject vihu\pahis,Rand(-90,90)
        EndIf
        
        If ObjectVision(vihu\pahis,ukko,180,1000) Then
            PointObject vihu\pahis,ukko
            sight=1

        EndIf
        
        
    Next vihu

User avatar
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: Vihujen sijoitus datakerroksen avulla

Post by tuhoojabotti » Fri May 02, 2008 6:52 pm

se johtuu siitä että riittää jos yksi vihu "näkee" sinut niin sight muuttuu trueksi joten silloin mikään botti ei enää tee sitä kääntymis tarkistusta

korjaus: lisää field sight vihuille eli jokaisella on oma sight arvo ja testaa sillä vihu\sight

ja sight muuttujaa ei koskaan nollata vaikka ukko katoaisi näköpiiristä vihu seuraa sitä hamaan tulevaisuuteen :D eli lisää ObjectVision() iffiin

Code: Select all

else 
vihu\sight=0
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”

User avatar
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 9:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 » Fri May 02, 2008 7:01 pm

Koitan saada toimimaan...

P.S. sightin ei ole tarkoituskaan nollautua :P

EDIT: Sain toimiin... Kiitoksia ja anteeksi että kyselen näin paljon mutta tässä tulee taas: Kun yritän tarkistaa että osuuko pelaajan ammukset vihuun niin tulee MAV. Koodia:

Code: Select all

For luoti.AMMUS=Each AMMUS
        MoveObject luoti\obj,8
        
        If GetMap(2,ObjectX(luoti\obj),ObjectY(luoti\obj)) Then
            
            DeleteObject luoti\obj
            Delete luoti
        Elseif ObjectsOverlap(luoti\obj,vihu\pahis) Then
            DeleteObject luoti\obj
            Delete luoti
        
Next luoti

User avatar
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: Vihujen sijoitus datakerroksen avulla

Post by Koodiapina » Fri May 02, 2008 9:06 pm

Sun täytyy käydä läpi myös vihut, koska nekin on tehty tyypeillä. Eli näin:

Code: Select all

For luoti.AMMUS=Each AMMUS
      MoveObject luoti\obj,8
      If GetMap(2,ObjectX(luoti\obj),ObjectY(luoti\obj)) Then
           DeleteObject luoti\obj
           Delete luoti
      endif
      for vihu.VIHUT = each VIHUT
            if ObjectsOverlap(luoti\obj,vihu\pahis) Then
                 DeleteObject luoti\obj
                 Delete luoti
            endif
      next vihu
Next luoti
En voi testata koodia, mutta kaipa se toimii.
Last edited by Koodiapina on Sat May 03, 2008 10:41 am, edited 1 time in total.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 9:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 » Sat May 03, 2008 9:46 am

Nyt osuu vihollisiin mutta nyt lyö MAVia kun osuu seinään....

User avatar
Murskaaja
Member
Posts: 92
Joined: Tue Aug 28, 2007 8:19 pm
Contact:

Re: Vihujen sijoitus datakerroksen avulla

Post by Murskaaja » Sat May 03, 2008 11:29 am

Tuo johtuu siitä, että seinään osumisen jälkeen kun luoti on poistettu, Grandin koodissa tarkistetaan vielä osuiko luoti vihuihin. Ja MAVihan se iskee kun luotia ei enää ole. Tämä on onneksi helppo korjata. Törmäyksentunnistus vihujen kanssa olisi vielä muutenkin bugannut jossain vaiheessa, sillä loopista ei poistuttu luodin poistamisen jälkeen. Tässä korjattu versio:

Code: Select all

For luoti.AMMUS=Each AMMUS
    MoveObject luoti\obj,8
    If GetMap(2,ObjectX(luoti\obj),ObjectY(luoti\obj)) Then
        DeleteObject luoti\obj
        Delete luoti
    Else
        For vihu.VIHUT = each VIHUT
            If ObjectsOverlap(luoti\obj,vihu\pahis) Then
                DeleteObject luoti\obj
                Delete luoti
                Exit
            EndIf
        Next vihu
    EndIf
Next luoti
Homma toimii nyt siis niin, että jos seinään ei osuttu, tarkistetaan myös vihut. Ja vihuun osutessa poistutaan niiden tarkistuksesta (exit), ettei jatkettaisi tarkistusta enää olemattoman luodin kanssa.
ASCII star wars Xtreme | Cool Bombers | Combat (kehitteillä)

RedShadow productions

User avatar
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 9:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 » Sat May 03, 2008 1:13 pm

Kiitoksia paljon kaikille! Nyt en ainakaan tällä hetkellä tarvitse enempää apua... Kiitoksia!

Post Reply