Vihollisten liikkuminen

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
FuJi
Member
Posts: 70
Joined: Tue Aug 28, 2007 3:09 pm

Vihollisten liikkuminen

Post by FuJi »

Miten saisin viholliset liikkumaan pelaajaa päin?
Olen tätä yrittänyt miettiä ja kokeillutkin, mutta en ole saanut onnistumaan.

Tuli myös toinen ongelma noiden vihujen luonnissa.
Mikä tässä koodissa ob vikana:

Code: Select all

ukko = LoadObject("Media/soldier.bmp",72)
ShowObject ukko, OFF 
PositionObject 10,10

vihu = LoadObject("Media/guy.bmp",72)
ShowObject vihu, OFF 

Repeat 

Type VIHUT
    Field obj
End Type 

vihu.VIHUT = New (VIHUT)
vihu\obj = CloneObject (ammus)

CloneObjectPosition vihu\obj, ukko +50
CloneObjectOrientation vihu\obj, ukko +50
ResetObjectCollision vihu\obj

For vihu.VIHUT = Each VIHUT to 15
    MoveObject vihu\obj, 1
    If ObjectX ukko = ObjectX vihu\obj And ObjectY ukko = ObjectY vihu\obj Then 
        DeleteObject vihu\obj
        Delete vihu
    EndIf 
Next vihu

DrawScreen
Forever 
Last edited by FuJi on Thu Sep 06, 2007 8:31 pm, edited 1 time in total.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Vihollisten liikkuminen

Post by koodaaja »

FuJi wrote:Miten saisin viholliset liikkumaan pelaajaa päin?
Olen tätä yrittänyt miettiä ja kokeillutkin, mutta en ole saanut onnistumaan.

Tuli myös toinen ongelma noiden vihujen luonnissa.
Mikä tässä koodissa ob vikana:

Code: Select all

ukko = LoadObject("Media/soldier.bmp",72)
ShowObject ukko, OFF 
PositionObject 10,10

vihu = LoadObject("Media/guy.bmp",72)
ShowObject vihu, OFF 

Repeat 

Type VIHUT
    Field obj
End Type 

vihu.VIHUT = New (VIHUT)
vihu\obj = CloneObject (ammus)

CloneObjectPosition vihu\obj, pelaaja +50
CloneObjectOrientation vihu\obj, pelaaja +50
ResetObjectCollision vihu\obj

For vihu.VIHUT = Each VIHUT
    MoveObject vihu\obj, 1
    If ObjectX ukko = ObjectX vihu\obj And ObjectY ukko = ObjectY vihu\obj Then 
        DeleteObject vihu\obj
        Delete vihu
    EndIf 
Next vihu

DrawScreen
Forever 
Koodi oli virheitä täynnä.

Code: Select all

Type VIHUT
    Field obj
End Type 

ukko = LoadObject("Media/soldier.bmp",72)
PositionObject ukko, 0,10

vihuobj = LoadObject("Media/guy.bmp",72)
ShowObject vihuobj, OFF 

vihu.VIHUT = New (VIHUT)
vihu\obj = CloneObject (vihuobj)
    
CloneObjectPosition vihu\obj, ukko
CloneObjectOrientation vihu\obj, ukko
TranslateObject vihu\obj, 50, 50

Repeat 
    
    TurnObject ukko, ( LeftKey() - RightKey())*4
    MoveObject ukko,( UpKey() - DownKey() )*3
    
    For vihu.VIHUT = Each VIHUT
        PointObject vihu\obj, ukko
        MoveObject vihu\obj, 1
        If ObjectsOverlap(vihu\obj, ukko, 2) Then 
            DeleteObject vihu\obj
            Delete vihu
        EndIf 
    Next vihu
    
    DrawScreen
Forever 
Tätä varmaan hait. Mutta kerronpa siis, mitä teit väärin:

Pistit pelaajan hahmon näkymättömiin =S, määrittelit tyypin loopissa (repeatin ja foreverin välissä), käytit objektille ja tyypin instanssille samaa nimeä, yritit kloonata objektin, jota ei ole (ammus? O.o), yritit asettaa vihun pelaaja-objektin kohdalle, vaikka kyseistä objektia ei ollut olemassakaan, lisäksi laitoit tuonne molempiin +50, vaikka tässä pyydetään objektia, jolloin yritettiin hakea jotain randomobjektia, jota ei tietenkään ollut olemassa, käytit purkkametodia päällekkäisyyksien tarkistamiseen etkä tietenkään sisentänyt looppia. Eli nyt vähän huolellisuutta ;D
FuJi
Member
Posts: 70
Joined: Tue Aug 28, 2007 3:09 pm

Re: Vihollisten liikkuminen

Post by FuJi »

koodaaja wrote:
Tätä varmaan hait. Mutta kerronpa siis, mitä teit väärin:

Pistit pelaajan hahmon näkymättömiin =S, määrittelit tyypin loopissa (repeatin ja foreverin välissä), käytit objektille ja tyypin instanssille samaa nimeä, yritit kloonata objektin, jota ei ole (ammus? O.o), yritit asettaa vihun pelaaja-objektin kohdalle, vaikka kyseistä objektia ei ollut olemassakaan, lisäksi laitoit tuonne molempiin +50, vaikka tässä pyydetään objektia, jolloin yritettiin hakea jotain randomobjektia, jota ei tietenkään ollut olemassa, käytit purkkametodia päällekkäisyyksien tarkistamiseen etkä tietenkään sisentänyt looppia. Eli nyt vähän huolellisuutta ;D
Juu tässä näitä virheitä tuli kun nopeasti tämän tein ja osan koodista kopioin tuosta manuaalin tyyppi oppaasta.
Ja miten esimerkiksi saisi 10 vihua luotua?
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Vihollisten liikkuminen

Post by Jonez »

Luot ne vihut normaaliin tyyliin, mutta silmukan sisällä. Se, kuinka monta kertaa silmukka käydään läpi, kertoo kuinka monta vihollista luodaan:

Code: Select all

For i = 1 To 10
    nVihu.VIHUT = New(VIHUT)
    nVihu\obj = CloneObject(emävihu)
Next i
Kannattaa käydä ne cb:n oppitunnit huolellisesti läpi. Siellä kerrotaan täysin selvästi miten luoteja luodaan ja liikutetaan tyyppejä käyttämällä. Noiden kymmenen vihun luominen on vain oppituntien soveltamista.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
FuJi
Member
Posts: 70
Joined: Tue Aug 28, 2007 3:09 pm

Re: Vihollisten liikkuminen

Post by FuJi »

Jonez wrote:

Code: Select all

For i = 1 To 10
    nVihu.VIHUT = New(VIHUT)
    nVihu\obj = CloneObject(emävihu)
Next i
Näin tämä ei oikein toimi, koska vihollisia tulee lisää ja lisää.
Basic
Newcomer
Posts: 25
Joined: Tue Aug 28, 2007 3:34 pm
Location: Siellä jossain kaukana.
Contact:

Re: Vihollisten liikkuminen

Post by Basic »

Olet nähtävästi laittanut koodin Repeat silmukan sisään. Laita se ennen sitä:

Code: Select all

Type VIHUT
    Field obj
End Type

ukko = LoadObject("Media/soldier.bmp",72)
PositionObject ukko, 0,10

vihuobj = LoadObject("Media/guy.bmp",72)
ShowObject vihuobj, OFF

For i=0 To 10
vihu.VIHUT = New (VIHUT)
vihu\obj = CloneObject (vihuobj)

PositionObject vihu\obj,Rand (0,100),Rand (0,100)
Next i

Repeat
   
    TurnObject ukko, ( LeftKey() - RightKey())*4
    MoveObject ukko,( UpKey() - DownKey() )*3
   
    For vihu.VIHUT = Each VIHUT
        PointObject vihu\obj, ukko
        MoveObject vihu\obj, 1
        If ObjectsOverlap(vihu\obj, ukko, 2) Then
            DeleteObject vihu\obj
            Delete vihu
        EndIf
    Next vihu
   
    DrawScreen
Forever
;)
Post Reply