Olipa yksinkertainen juttu x) Kiitos kaunis vielä kerran.project coder wrote:Siirrät sen MOVEGRIDin luonnin sen ekan silmukan alkuun:-Z- wrote:Juu, eli sehän toimii, kiitos kovin. Teen nyt koodissa sillä tavalla, että koodin alussa ja aina kun kaikki movegridit poistetaan, luodaan uusi jonnekkin periferiaan. Toimiiko tämä parhaiten, vai onko jotain muuta, vähemmän purkkaista syteemiä?project coder wrote: Onko DUDE ja MOVEGRID luotuna, koska kolmannelle riville pääsee vain, jos molempia on vähintään yksi.
Code: Select all
For soldier.DUDE = Each DUDE If MouseWX()>ObjectX(soldier\obj)-15 And MouseWX()<ObjectX(soldier\obj)+15 And MouseWY()<ObjectY(soldier\obj)-15 And MouseWY()>ObjectY(soldier\obj)+15 Then If MouseHit(1) Then For i = 1 To 4 newmgrid.MOVEGRID = New(MOVEGRID) newmgrid\obj = CloneObject(greengrid) CloneObjectPosition newmgrid\obj, soldier\obj RotateObject newmgrid\obj, rotation MoveObject newmgrid\obj, 30 rotation + 90 Next i EndIf EndIf For mgrid.MOVEGRID = Each MOVEGRID If MouseWX()>ObjectX(mgrid\obj)-15 And MouseWX()<ObjectX(mgrid\obj)+15 And MouseWY()>ObjectY(mgrid\obj)-15 And MouseWY()<ObjectY(mgrid\obj)+15 Then If MouseHit(1) Then CloneObjectPosition soldier\obj, mgrid\obj For grid.MOVEGRID = Each MOVEGRID DeleteObject grid\obj Delete grid Next grid Exit EndIf EndIf Next mgrid Next soldier
Edit: lisää.
Jatkoin riemukkaana strategiapelini koodaamista kunnes tulin uuden ongelman eteen (vaihteeksi)
olin tekemässä systeemiä, jolla toisen lehmän päälle osuva "movegrid" poistettaisiin. Nyt kuitenkin, kun valitsee toisen lehmän vieressä olevan lehmän, movegrid "välähtää" lehmän päällä. Pieni mutta häiritsevä fiba. Yritin vaikka minkälaista sydeemiä, mutta ei onnannut. Koodaus on erityisen kivaa silloin kun sitä ei osaa.
Code: Select all
Type MOVEGRID
Field obj
End Type
Type DUDE
Field obj
Field sel
End Type
SCREEN 400,301
ShowMouse OFF
ClsColor cbwhite
Color cbblack
cow=LoadObject("media/cow.bmp")
ShowObject cow, OFF
greengrid = LoadObject("media/movegrid.png")
ShowObject greengrid, OFF
rotation=0
soldier.DUDE = New(DUDE)
soldier\obj = CloneObject(cow)
ScreenPositionObject soldier\obj, 15,15
soldier.DUDE = New(DUDE)
soldier\obj = CloneObject(cow)
ScreenPositionObject soldier\obj, 285,285
Repeat
For i = 1 To 11
Line x,0,x,300
x+30
Next i
x=0
For i = 1 To 11
Line 0,y,300,y
y+30
Next i
y=0
For soldier.DUDE = Each DUDE
If MouseWX()>ObjectX(soldier\obj)-15 And MouseWX()<ObjectX(soldier\obj)+15 And MouseWY()<ObjectY(soldier\obj)+15 And MouseWY()>ObjectY(soldier\obj)-15 Then
If MouseHit(1) Then
For guy.DUDE = Each DUDE
guy\sel=0
Next guy
For grid.MOVEGRID = Each MOVEGRID
DeleteObject grid\obj
Delete grid
Next grid
soldier\sel=1
For i = 1 To 4
mgrid.MOVEGRID = New(MOVEGRID)
mgrid\obj = CloneObject(greengrid)
CloneObjectPosition mgrid\obj, soldier\obj
RotateObject mgrid\obj, rotation
MoveObject mgrid\obj, 30
rotation + 90
Next i
EndIf
EndIf
For mgrid.MOVEGRID = Each MOVEGRID
If ObjectsOverlap(soldier\obj, mgrid\obj) Then
DeleteObject mgrid\obj
Delete mgrid
Exit
EndIf
If MouseWX()>ObjectX(mgrid\obj)-15 And MouseWX()<ObjectX(mgrid\obj)+15 And MouseWY()>ObjectY(mgrid\obj)-15 And MouseWY()<ObjectY(mgrid\obj)+15 And soldier\sel=1 Then
If MouseHit(1) Then
CloneObjectPosition soldier\obj, mgrid\obj
For grid.MOVEGRID = Each MOVEGRID
DeleteObject grid\obj
Delete grid
Next grid
mgrid.MOVEGRID = New(MOVEGRID)
mgrid\obj = CloneObject(greengrid)
PositionObject mgrid\obj, 300,300
Exit
EndIf
EndIf
Next mgrid
Next soldier
DrawGame
Color 100,100,100
Box 301,0,100,301
Color cbblack
Text 302,2, MouseX()+":"+MouseY()
Color cbred
Dot MouseX(), MouseY()
Dot MouseX()+1, MouseY()
Dot MouseX()-1, MouseY()
Dot MouseX(), MouseY()+1
Dot MouseX(), MouseY()-1
Color cbblack
DrawScreen
Until EscapeKey()