type vihuille omat reitit

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
jag heter karl peter

type vihuille omat reitit

Post by jag heter karl peter » Wed Jan 02, 2008 3:24 pm

kuinka saan type vihut liikkumaan eri reittejä :o

User avatar
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: type vihuille omat reitit

Post by otto90x » Wed Jan 02, 2008 6:21 pm

En aivan ymmärtänyt että haluatko määritellä reitit etukäteen vai että vihut menevät itse omia reittejään. Siispä tein esimerkit molemmista.

Esimerkki jossa vihut liikkuvat itsekseen, lisää vihuja hiiren oikealla napilla.

Code: Select all

SCREEN 800,600

Type vihu
    Field obj
End Type

Global isäntäukko, map, ukko

map=LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject map,0,0,0.5

isäntäukko=LoadObject("media/guy.bmp",72)
ShowObject isäntäukko,OFF

ukko=CloneObject(isäntäukko)

SetupCollision ukko,map,2,4,2

Repeat

    If MouseHit(2) Then lisää_vihu(MouseWX(),MouseWY())

    MoveObject ukko,(UpKey()-(DownKey()/2))*3
    TurnObject ukko,(LeftKey()-RightKey())*3
    
    päivitä_vihut()
    
    CloneCameraPosition ukko
    
    DrawScreen

Forever

Function päivitä_vihut()
    For v.vihu=Each vihu
        MoveObject v\obj,3
        If CountCollisions(v\obj) Then TurnObject v\obj,Rand(-60,60)  
    Next v
End Function 

Function lisää_vihu(_x,_y)
    If GetMap (2,_x,_y)=0 Then 
        v.vihu=New(vihu)
        v\obj=CloneObject(isäntäukko) 
        PositionObject v\obj,_x,_y
        RotateObject v\obj,Rand(360)
        SetupCollision v\obj,map,2,4,2
        SetupCollision v\obj,ukko,2,2,2
    EndIf
End Function 
Esimerkki jossa hahmoille ensin kerrotaan mitä pitää tehdä ja sitten ne liikkuvat niin.

Code: Select all

SCREEN 800,600

Type hahmo
    Field obj
    Field dest
    Field nimi$
    Field nopeus
End Type


dir$="media\"

LisääHahmo(dir$+"guy.bmp","order=go destination=-50,0!order=go destination=200,200!order=go destination=200,-200!order=go destination=-200,-200!order=go destination=-200,200","reiska",2)

LisääHahmo(dir$+"guy.bmp","order=go destination=50,0!order=go destination=-200,200!order=go destination=-200,-200!order=go destination=200,-200!order=go destination=200,200","tapsa",2)

LisääHahmo(dir$+"guy.bmp","order=go destination=-50,0!order=follow duration=10000 name=tapsa","Jaakko",2)

Repeat

    PäivitäHahmot()
    DrawScreen 

Forever

Function LisääHahmo(_obj$,reitti$,nimi$,nopeus)

    If FileExists(_obj$) 
        h.hahmo=New(hahmo) 
        h\obj=LoadObject(_obj$,72)
        ObjectString h\obj,reitti$
        ObjectInteger h\obj,1
        h\nopeus=nopeus
        h\nimi=nimi$
        For HH.HAHMO=Each HAHMO 
            If HH<>H Then 
                SetupCollision H\OBJ,HH\OBJ,2,2,2
                SetupCollision HH\OBJ,H\OBJ,2,2,2
            EndIf
        Next HH
    EndIf

End Function 

Function PäivitäHahmot()

    DrawToWorld OFF,OFF,ON 

    For h.hahmo=Each hahmo
    
        reitinpituus=CountWords(ObjectString(h\obj),"!")

        sana$=GetWord(ObjectString(h\obj),ObjectInteger(h\obj),"!")

        käsky$=Readsetup(sana$,"order"," ")
        
        Select käsky$
            Case "go"
                minne$=Readsetup(sana$,"destination"," ")
                x=Int(GetWord(minne$,1,","))
                y=Int(GetWord(minne$,2,","))
                
                If Not h\dest Then h\dest=MakeObject()
                
                PositionObject h\dest,x,y
                
                If Distance2(h\dest,h\obj)<5 Then 
                    DeleteObject h\dest
                    h\dest=0
                    Goto seuraavakäsky
                EndIf
                
            Case "follow"
                ketä$=Readsetup(sana$,"name"," ")
                
                For hh.hahmo=Each hahmo
                    If hh<>h Then 
                        If Lower(hh\nimi$)=ketä$ Then 
                            'CloneObjectPosition h\dest,hh\obj
                            'CloneObjectOrientation h\dest,hh\obj 
                            h\dest=hh\obj
                        EndIf
                    EndIf
                Next hh
                
                kauanko=int(Readsetup(sana$,"duration"," "))
                
                If Not ObjectFloat (h\obj) Then 
                    ObjectFloat h\obj,(Timer()+kauanko)
                Else
                    If ObjectFloat (h\obj) <Timer() Then 
                        ObjectFloat h\obj,0
                        h\dest=0
                        Goto seuraavakäsky
                     EndIf  
                EndIf
                
            Case "stop"
                kauanko=int(Readsetup(sana$,"duration"," "))
                If Not ObjectFloat (h\obj) Then 
                    ObjectFloat h\obj,(Timer()+kauanko)
                Else
                    If ObjectFloat (h\obj) <Timer() Then 
                        ObjectFloat h\obj,0
                        Goto seuraavakäsky
                     EndIf  
                EndIf

                
        End Select
        
        jatkuu:

        If h\dest Then 
            RotateObject h\obj,CurveAngle2(GetAngle2(h\obj,h\dest),ObjectAngle(h\obj),11)  
            MoveObject h\obj,h\nopeus
        EndIf
        
        Color cbwhite

        Text ObjectX(h\obj)-ObjectSizeX(h\obj)/2,ObjectY(h\obj)+ObjectSizeY(h\obj)/2+15 ,isoalkukirjain(h\nimi)
        
    Next h
    
    Return 0
    
    seuraavakäsky:
        ObjectInteger h\obj,Int(ObjectInteger (h\obj)+1)
                    
        If ObjectInteger (h\obj)>reitinpituus Then 
            ObjectInteger h\obj,1
        EndIf
    Goto jatkuu
    
    
End Function 

Function Readsetup(_setup$,_entry$,_erotin$)

    pituus=CountWords(_setup$,_erotin$)
    
    For i=1 To pituus
        sana$=GetWord(_setup$,i,_erotin$)
        If Lower(GetWord(sana$,1,"="))=Lower(_entry$) Then Return Lower(Str(GetWord(sana$,2,"=")))
    Next i
    
    Return ""

End Function 

Function isoalkukirjain(_txt$)

    eka$=Left(_txt$,1) 'otetaan ensimmäinen kirjain 
    muut$=Mid(_txt$,2) 'otetaan muut kirjaimet
    Return Str( Upper(eka$)+muut$) 'yhdistetään 

End Function

Function CurveAngle2(targetangle#,oldangle#,incre#) 'Curves "oldangle" to "targetangle" by "incre" (e.g.homing missile)
   targetangle = WrapAngle(targetangle) : oldangle = WrapAngle(oldangle)
   If (oldangle + 360) - targetangle < targetangle - oldangle Then oldangle = 360 + oldangle
   If (targetangle + 360) - oldangle < oldangle - targetangle Then targetangle = 360 + targetangle
   oldangle = oldangle - (oldangle-targetangle) / incre
   Return oldangle
End Function
Esimerkkeihin jäi hieman ylimääräisiäkin juttuja joten koita löytää se olennainen. Toivottavasti auttaa.
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: type vihuille omat reitit

Post by MaGetzUb » Thu Jan 03, 2008 1:30 am

Osaatko käyttää dataa? Jos osaat niin hyvä. Tee datalla karttaan waypointit. Ja sitten kun käyt ukon alla olevan datan läpi ja se numero joka sieltä putkahtaa esim. 5. niin vihollinen tajuaa, että kannattaa kääntyä oikealle ja taas 8. olisi sellaanen jonka botti typerillään aivoillansa päättää mihinkä suuntaan käännytään. Tajusitko? Tuota selvemmin en osaa selittää.
Funktio parempaan kartan tarkistukseen ukon kohalta:

Code: Select all

Function ObjGetMap(obj,kerros,tile) 
If GetMap(kerros,ObjectX(Obj),Objecty(Obj))=tile then 
Return 1 
EndIF
EndFunction

Pitäisi toimia... Jos ei toimi nii ei sitte muokatkaa itte.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

jag heter karl peter

Re: type vihuille omat reitit

Post by jag heter karl peter » Thu Jan 03, 2008 8:19 pm

kiitti molemmat mutta kuka teistä tietää kuinka nää lehmät saa liikkumaan omia erillaisia reittejä :P

Code: Select all

SCREEN 800, 600

objBall = LoadObject("media/cow.bmp")
ShowObject objBall, OFF



Type BALLS
    Field obj
EndType

For i = 1 To 100
    b.BALLS = New(BALLS)
    b\obj = CloneObject(objBall)
    
    PositionObject b\obj, Rand(-390, 390), Rand(-270, 270)
Next i


Repeat

Text 0,0, " mites nää saa sillee liikkuu että kaikki kulkee omia reittejä"

    DrawScreen
Forever

Post Reply