Vihujen sijoitus datakerroksen avulla

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

Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 »

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 »

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
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: Vihujen sijoitus datakerroksen avulla

Post by Aavesoturi »

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
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 »

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..
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: Vihujen sijoitus datakerroksen avulla

Post by Aavesoturi »

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.
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 »

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!
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 »

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
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 »

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.”
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 »

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
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Vihujen sijoitus datakerroksen avulla

Post by Koodiapina »

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.
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 »

Nyt osuu vihollisiin mutta nyt lyö MAVia kun osuu seinään....
Murskaaja
Member
Posts: 92
Joined: Tue Aug 28, 2007 8:19 pm
Contact:

Re: Vihujen sijoitus datakerroksen avulla

Post by Murskaaja »

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
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Vihujen sijoitus datakerroksen avulla

Post by Sly_Jack0 »

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