Aloittelin tässä noin kahden vuoden tauon jälkeen taas jonkinlaista CoolBasic-ohjelmointiharrastusta, suhteellisen hyvin
vielä muistan ne silloin opetellut asiat, joten en kuitenkaan ihan tyhjiltä aloittele, siitä sitten asiaan.
Lyhyesti sanottuna, tein räiskintäpelipohjan jossa liikutaan WASD-näppäimillä ja ohjataan hiirellä (hiirikursorin tilalla tähtäin).
Ampumisjärjestelmä toimii lähes moitteettomasti, viholliset syntyvät satunnaisiin pisteisiin kartalla muutaman sekunnin välein.
Ongelmaksi on nyt muodostunut sellainen asia, että en osaa yksilöidä niitä kloonivihollisia jotka sinne kartalle syntyvät "päävihusta", eli toisin sanoen,
kun saan ohjelman poistamaan "vihu\obj" in, se poistaa samalla kaikki kartalla olevat klooniviholliset. Tosin yleensä en saa tätä tapahtumaan, vaan kokeiluyrityksilläni
oli suurimmalla osalla tuloksena vihollisen ampumisesta seuraava MAV.
Ymmärrän MAVin käsitteen, sen että yritetään käyttää jotain objektia joka on poistettu jo muistista, mutta en millään keksi miten tämän saisi sivuutettua.
Apua olen jo etsinyt näiltä foorumeilta, mutta kaikissa tapauksissa niissä annetut vastaukset eivät toimineet minulla.
Toinen ongelma yksilöintiin liittyen on se, että en osaa luoda kloonivihollisten välile törmäystunnistusta. Paras mitä keksin oli suurinpiirtein tämännäköinen:
Code: Select all
SetupCollision vihu\obj, vihu\obj, 2, 2, 2
Eli loppuun lyhyesti tiivistettynä: Kuinka yksilöin tyyppikirjastosta (<-- oikea nimitys?) luotuja kloonivihollisia?
Liitin koodin, että voitte halutessanne tarkistella sitä:
Code: Select all
SCREEN 1280, 800
FrameLimit 60
Gosub LoadData
Type LUODIT
Field obj
End Type
Type VIHUT
Field obj
Field health
End Type
mSpeed = 2
gPower = 5
SetupCollision pHahmo, kartta, 2, 4, 2
'PlaySound Music
Repeat
RotateObject pHahmo, -GetAngle(ObjectX(pHahmo), ObjectY(pHahmo), MouseWX(), MouseWY())
Gosub CheckControls
Gosub SpawnEnemies
Gosub GiveAI
Gosub CheckBullets
CloneCameraPosition pHahmo
DrawScreen
Until EscapeKey()
LoadData:
kartta = LoadMap("Media/cdm2.til","Media/tileset.bmp")
PlayObject kartta, 0, 0, 1
Global pHahmo
pHahmo = LoadObject("Media/soldier.bmp", 72)
Global pääVihu
pääVihu = LoadObject("Media/guy.bmp", 72)
ShowObject pääVihu, OFF
PositionObject pääVihu, -200, 0
Global pati
pati = LoadObject("Media/bullet.bmp")
ShowObject pati, OFF
Global shot
shot = LoadSound("Media/gun 1.wav")
music = LoadSound("Media/Sk_Battle2.mp3")
huuto = LoadSound("Media/scream1.wav")
tähtäin = LoadImage("Media/crosshair.bmp")
ShowMouse tähtäin
HotSpot tähtäin, ImageWidth(tähtäin) / 2, ImageHeight(tähtäin) / 2
Return
CheckControls:
If KeyDown(cbKeyW) Then MoveObject pHahmo, mSpeed
If KeyDown(cbKeyS) Then MoveObject pHahmo, -mSpeed
If KeyDown(cbKeyA) Then MoveObject pHahmo, 0, -mSpeed
If KeyDown(cbKeyD) Then MoveObject pHahmo, 0, mSpeed
If KeyDown(cbKeyLShift) Then mSpeed = 5 Else mSpeed = 2
If KeyHit(cbKeyT) Then TeleportObject(pHahmo)
If MouseHit(1) And reload=0 Then
Shoot(pHahmo)
'PlaySound shot
reload=5
EndIf
If MouseDown(2) And reload=0 Then
Shoot(pHahmo)
reload=2
EndIf
If reload>0 Then reload = reload-1
Return
CheckBullets:
For vihu.VIHUT = Each VIHUT
tuhoaVihu = 0
For luoti.LUODIT = Each LUODIT
MoveObject luoti\obj, gPower
If ObjectsOverlap(vihu\obj, luoti\obj) Then
tuhoaVihu = 1
DeleteObject luoti\obj
Delete luoti
ElseIf GetMap(2, ObjectX(luoti\obj), ObjectY(luoti\obj)) Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
If tuhoaVihu = 1 Then
DeleteObject vihu\obj
Delete vihu
EndIf
Next vihu
Return
SpawnEnemies:
If vihuAjastin = 0 Then
vihu.VIHUT = New(VIHUT)
vihu\obj = CloneObject(pääVihu)
'vihu\health = 100
SetupCollision vihu\obj, kartta, 2, 4, 2
SetupCollision vihu\obj, pHahmo, 2, 2, 2
TeleportObject(vihu\obj)
vihuAjastin = 120
EndIf
If vihuAjastin>0 Then vihuAjastin = vihuAjastin - 1
Return
GiveAI:
For vihu.VIHUT = Each VIHUT
'If vihu\health >= 0 Then
If ObjectSight(vihu\obj, pHahmo) Then
PointObject vihu\obj, pHahmo
MoveObject vihu\obj, 2
EndIf
'EndIf
Next vihu
Return
Function Shoot(_obj)
luoti.LUODIT = New(LUODIT)
luoti\obj = CloneObject(pati)
CloneObjectPosition luoti\obj, _obj
CloneObjectOrientation luoti\obj, _obj
MoveObject luoti\obj, 15
End Function
Function TeleportObject(_obj)
X = Rand(1, MapWidth())
Y = Rand(1, MapHeight())
tausta = GetMap2(0, x, y)
törmäys = GetMap2(2, x, y)
If tausta > 0 And törmäys = 0 Then
WX = (X * 32 - 16) - ((MapWidth() * 32) / 2)
WY = ((Y * 32 - 16) - ((MapHeight() * 32) / 2)) * -1
PositionObject _obj, WX, WY
RotateObject _obj, Rand(0, 360)
EndIf
End Function