Page 1 of 1
Aikamatkustussysteemi
Posted: Tue Jan 06, 2009 9:36 pm
by Mickey
Littlegreenin luoman ajankelausesimerkin (ei julkaistu) pohjalta loin tällaisen järjestelmän. Tähän kun lisätään vielä historian kulun muuttaminen (jonka olen jo suunnitellut) pitäisi saada aikaan varsin mielenkiintoisia pelejä. Itse olen ainakin suunnitellut sellaisia vielä tekeväni
Code: Select all
FrameLimit 50
players=1
Const x=1 'Sijainti X-akselilla
Const y=2 'Sijainti Y-akselilla
Const t=3 'sijainti kotihetkestä menneisyyteen
//TAULUKOINTI
Dim player(players,3,1500) As Float
in_past = 0 'nykyinen aika, jossa menneisyydessä ollaan
past_travel = 3 'aikamatkustusnopeus
Repeat
//LÄPIKÄYNTI
For i=1 To players
//MÄÄRITETÄÄN MENNEISYYTTÄ
For a=1500 To 1 Step -1
player(i,x,a)=player(i,x,a-1)
player(i,y,a)=player(i,y,a-1)
player(i,t,a)=player(i,t,a-1)
Next a
player(i,x,0)=player(i,x,0)+((RightKey()-LeftKey())*2)
player(i,y,0)=player(i,y,0)+((DownKey()-UpKey())*2)
player(i,t,0)=in_past
If KeyDown(cbKeyQ)=1 And KeyDown(cbKeyA)=0 Then past_travel + 1
If KeyDown(cbKeyA)=1 And KeyDown(cbKeyQ)=0 Then past_travel - 1
If KeyDown(cbKeyS)=1 And KeyDown(cbKeyW)=0 Then in_past = in_past + past_travel
If KeyDown(cbKeyW)=1 And KeyDown(cbKeyS)=0 Then in_past = in_past - past_travel
in_past - 1
If KeyDown(cbKeyE) = 1 Then in_past + 2 'Hetkeen pysähtyminen
If in_past > 1500 Then in_past = 1500
If in_past < 0 Then in_past = 0
If past_travel < 3 Then past_travel = 3
//MINÄSI
Color cbWhite
Box player(i,x,0)-5,player(i,y,0)-5,10,10
//Entiset minäsi
For j = 1 To 1500
If player (i,t,j) = in_past - j Then Box player(i,x,j)-5,player(i,y,j)-5,10,10
Next j
Next i
Text 0,20,FPS() + " " + in_past + " " + past_travel
DrawScreen
Forever
Näppäimet:
Liikkuminen: nuolet
Ajassa liikkuminen: W & S
Aikamatkustusnopeuden säätö: Q & A
Ajassa pysähtyminen: E
EDIT:Miksikähän kukaan ei kommentoi?
EDIT:Yleisön pyynnöstä hieman lisäselvennystä:
Tässä esimerkissä voit liikuttaa valkoista neliötä tilan lisäksi myös ajassa (aikakone-periaatteella, ei siis kelausta) ja nähdä samassa hetkessä oleskelleet aiemmat minäsi. Historia tallentuu puolen minuutin ajalta.
Re: Aikamatkustussysteemi
Posted: Wed Jan 07, 2009 8:46 pm
by axu
Aika mielenkiintoinen systeemi, pitää vähän syventyä että ymmärtää sen. En näe tästä ainakaan itselleni hyötyä, mutta jatka tämän kehittämistä ja hyvä tulee
Mickey wrote:Miksikähän kukaan ei kommentoi?
Sen jos keksit kerro mullekkin, sama ongelma :/
Re: Aikamatkustussysteemi
Posted: Thu Jan 08, 2009 2:28 pm
by KankiKalle
Sitten kun älysin miten tämä toimii, älysin että tämähän on hieno systeemi!
Mukavan erilainen idea, täytyy myöntää. Jos olisit selventänyt hieman mitä tässä tapahtuisi jne. niin moni varmasti ymmärtäisi paremmin mitä olet yrittänyt kertoa tällä systeemillä. Minulta kesti aika kauan (10 min
) ymmärtää mitä tässä piti tehdä.
Ja kärsivällisyydellä pääse pitkälle. Ei kaiken täydy tapahtua heti. Odota. Se ei vie kun hetken aikaa. Ja sinä itse määrät kuinka paljon se hetki on Ja sitten kun joku on kommentoinut, se hetki on ohi. Nuoren, ei niin viisaan ja hieman oudon tyypin opetuksia osa1.
Re: Aikamatkustussysteemi
Posted: Fri Jan 09, 2009 3:09 pm
by Mickey
Kiitos rohkaisevista kommenteistanne (ne ovat ensimmäisen esimerkkinsä julkaisseelle tärkeitä
). Jatkan toki tämän kehittelyä, sanoinhan aikovani tehdä tähän pohjautuvia pelejä. Saatanpa vielä julkaista jotain esimerkkiä siitä historian kulun muuttamisesta.
axu wrote: En näe tästä ainakaan itselleni hyötyä...
Tjep, tämä ei ole mikään kovin yleishyödyllinen esimerkki...
Re: Aikamatkustussysteemi
Posted: Fri Jan 09, 2009 4:58 pm
by kaneli2000
Nyt meni yli hilseen. En tajunnut tosta mitään.
...mutta jos sinä Mickey tajuat, niin saadan nähdä vielä hienoja pelejä.
Re: Aikamatkustussysteemi
Posted: Sat Jan 10, 2009 7:24 pm
by MaGetzUb
Helpompihan olisi tehdä typeillä tuollainen systeemi.. (Helpompi ja helpompi -.-) Mutta siitä saisi silti paljon kaistakkaamman, kuin taulukoilla.
Re: Aikamatkustussysteemi
Posted: Sun Jan 11, 2009 12:21 pm
by nevssons
programmer of DSG wrote:Helpompihan olisi tehdä typeillä tuollainen systeemi.. (Helpompi ja helpompi -.-) Mutta siitä saisi silti paljon kaistakkaamman, kuin taulukoilla.
Yhdellä objektilla kyllä, mutta jos olisi useampi object joutuisit määrittämään jokaiselle oman tyypin. Ja kyllä minä oisin tämänkin hoitanut taulukoilla.
Re: Aikamatkustussysteemi
Posted: Sun Jan 11, 2009 12:27 pm
by KilledWhale
Yksi mahdollisuus olisivat myös muistipalat jolloin tyyppimäärityksiä ei tarvittaisi. Muistipalan osoitteen voisi puskea talteen objektiin ojbectintegerin avulla
Re: Aikamatkustussysteemi
Posted: Sun Jan 11, 2009 1:23 pm
by Mickey
Taulukko on tuon edellämainitun Littlegreenin esimerkin peruja. Muistipaloja en tajua (
) eikä objectintegeristä olisi hyötyä ainakaan seuraavassa projektissani, koska teen sen piirtokomennoilla.
kaneli2000 wrote:Nyt meni yli hilseen. En tajunnut tosta mitään.
...mutta jos sinä Mickey tajuat, niin saadan nähdä vielä hienoja pelejä.
Jos siis oikein ymmärsin, tajuat kyllä aikamatkustuksen ja kenties tuon ohjelmanikin, muttet sen koodia etkä sen tarjoamaa esimerkkiä. Korjaa jos olen väärässä.
Re: Aikamatkustussysteemi
Posted: Thu Sep 29, 2011 4:11 pm
by mrZalli
Woo. Hieno systeemi. Voisin kokeilla käyttää tätä jos vain löydän idean ja innostuksen.
Re: Aikamatkustussysteemi
Posted: Thu Sep 29, 2011 5:19 pm
by Frozen
mrZalli wrote:Woo. Hieno systeemi. Voisin kokeilla käyttää tätä jos vain löydän idean ja innostuksen.
Ja tuon takia piti nostaa näin vanha topikki?
EDIT:Mutta kyllä tälläistä systeemiä käyttämällä voisi luoda pienen Braidia muistuttavan pelin.
Re: Aikamatkustussysteemi
Posted: Sat Oct 22, 2011 12:12 pm
by Mickey
mrZalli wrote:Woo. Hieno systeemi. Voisin kokeilla käyttää tätä jos vain löydän idean ja innostuksen.
Kiitos kehuista. On oikeastaan ihan kiva, että nostit tämän topikin ylös, niin muistin itsekin, mitä minun pitäisi ohjelmoida.
Re: Aikamatkustussysteemi
Posted: Sat Jun 23, 2012 2:04 pm
by MrMonday
Tein itsekkin pienen aikamatkustus-systeemin, mutta postaan sen tänne, kun kerta aiheesta jo ketju on pistetty pystyyn.
Code: Select all
SCREEN 800,600,32,0
Const _TIME = 500
obj = LoadObject("car.bmp",360)
floor = MakeObjectFloor()
floor_img = MakeImage(50,50)
DrawToImage floor_img
For x = 0 To ImageWidth(floor_img)
For y = 0 To ImageHeight(floor_img)
gray = Rand(100,200)
Color gray,gray,gray
Dot x,y
Next y
Next x
DrawToScreen
PaintObject floor, floor_img
Type PATH
Field x
Field y
Field ang
Field mm#
Field tt#
End Type
frame.PATH = New(PATH)
frame\x = ObjectX(obj)
frame\y = ObjectY(obj)
frame\ang = ObjectAngle(obj)
frame\mm# = m#
frame\tt# = t#
frames = frames + 1
Repeat
If KeyDown(57) And Before(frame) <> NULL And frames > 0 Then
frame = Before(frame)
RotateObject obj, frame\ang
PositionObject obj, frame\x, frame\y
m# = frame\mm#
t# = frame\tt#
frames - 1
ElseIf Not KeyDown(57)
If KeyDown(200) Then m# = m# + 0.05
If KeyDown(208) Then m# = m# - 0.05
If KeyDown(205) Then t# = t# - 0.05
If KeyDown(203) Then t# = t# + 0.05
If m# < -5.00 Then m# = -5.00
If m# > 5.00 Then m# = 5.00
If t# < -3.00 Then t# = -3.00
If t# > 3.00 Then t# = 3.00
If Not KeyDown(200) Or KeyDown(208) Then m# = CurveValue(0.00,m#,100)
If Not KeyDown(205) Or KeyDown(203) Then t# = CurveValue(0.00,t#,10)
If ObjectX(obj) < -400 Then PositionObject obj, 400, ObjectY(obj)
If ObjectX(obj) > 400 Then PositionObject obj, -400, ObjectY(obj)
If ObjectY(obj) < -300 Then PositionObject obj, ObjectX(obj), 300
If ObjectY(obj) > 300 Then PositionObject obj, ObjectX(obj), -300
MoveObject obj, m#
TurnObject obj, t#
frame.PATH = New(PATH)
frame\x = ObjectX(obj)
frame\y = ObjectY(obj)
frame\ang = ObjectAngle(obj)
frame\mm# = m#
frame\tt# = t#
frames = frames + 1
If frames => _TIME Then
Delete First(PATH)
frames = frames - 1
EndIf
EndIf
DrawGame
Color 255,0,0
Text 0,0,"Time: "+frames
DrawScreen
Until KeyHit(1)
Mikään täydellinen tämä ei ole, mutta parannuksia tähän olisi tarkoitus tehdäkkin.
Ohjaus - Nuolinäppäimet.
Ajan kelaus - Välilyönti.
EDIT:Vaihdoin taulukoista tyyppeihin, nyt toimii todella nätisti
Re: Aikamatkustussysteemi
Posted: Tue Jun 26, 2012 1:40 pm
by valscion
MrMonday wrote:Tein itsekkin pienen aikamatkustus-systeemin, mutta postaan sen tänne, kun kerta aiheesta jo ketju on pistetty pystyyn.
Muuten hyvä mutta bugailee vähän jos ei kelaa täysin alkuun ja jatkaa liikkumista. Liikkumisen jälkeen kun kelaa taaksepäin niin siinä kohtaa jossa jäi kelaus kesken, niin tapahtuu jänniä bugeja ja auto hyppää väärään paikkaan.
Re: Aikamatkustussysteemi
Posted: Thu Jul 05, 2012 12:50 pm
by Combatti
Hieno systeemi. Itse en huomannut bugia? Tällä voisi pienellä muokkauksella tehdä replaysysteeminkin. Tiedä häntä, tuleeko itselläni koskaan käyttöön(Toden näköisesti, koska en täällä ole tähän asti muuta tehnyt, kuin testannut pelejä ja funktioita jajoistakin tehdä oman versioni tai muokkaukseni
)
Re: Aikamatkustussysteemi
Posted: Thu Jul 05, 2012 6:52 pm
by MrMonday
Oli näköjään pieni virhe tosiaan päässyt sekaan, mutta tässä siis korjattuna
Enää puuttuisi, että saisi nuo systeemit tungettua funktioon, ja kelaus monelle (= kaikille) kuvalle/objektille kerrallaan, mutta oma mielenkiinto ei riitä tällä hetkellä moiseen
Code: Select all
SCREEN 800,600,32,0
Const _TIME = 500
obj = LoadObject("media/car.bmp",360)
floor = MakeObjectFloor()
floor_img = MakeImage(50,50)
DrawToImage floor_img
For x = 0 To ImageWidth(floor_img)
For y = 0 To ImageHeight(floor_img)
gray = Rand(100,200)
Color gray,gray,gray
Dot x,y
Next y
Next x
DrawToScreen
PaintObject floor, floor_img
Type PATH
Field x
Field y
Field ang
Field mm#
Field tt#
End Type
frame.PATH = New(PATH)
frame\x = ObjectX(obj)
frame\y = ObjectY(obj)
frame\ang = ObjectAngle(obj)
frame\mm# = m#
frame\tt# = t#
frames = frames + 1
Repeat
If KeyDown(57) And Before(frame) <> NULL And frames > 0 Then
frame = Last(PATH)
RotateObject obj, frame\ang
PositionObject obj, frame\x, frame\y
m# = frame\mm#
t# = frame\tt#
frames - 1
Delete frame
ElseIf Not KeyDown(57)
If KeyDown(200) Then m# = m# + 0.05
If KeyDown(208) Then m# = m# - 0.05
If KeyDown(205) Then t# = t# - 0.05
If KeyDown(203) Then t# = t# + 0.05
If m# < -5.00 Then m# = -5.00
If m# > 5.00 Then m# = 5.00
If t# < -3.00 Then t# = -3.00
If t# > 3.00 Then t# = 3.00
If Not KeyDown(200) Or KeyDown(208) Then m# = CurveValue(0.00,m#,100)
If Not KeyDown(205) Or KeyDown(203) Then t# = CurveValue(0.00,t#,10)
If ObjectX(obj) < -400 Then PositionObject obj, 400, ObjectY(obj)
If ObjectX(obj) > 400 Then PositionObject obj, -400, ObjectY(obj)
If ObjectY(obj) < -300 Then PositionObject obj, ObjectX(obj), 300
If ObjectY(obj) > 300 Then PositionObject obj, ObjectX(obj), -300
MoveObject obj, m#
TurnObject obj, t#
frame.PATH = New(PATH)
frame\x = ObjectX(obj)
frame\y = ObjectY(obj)
frame\ang = ObjectAngle(obj)
frame\mm# = m#
frame\tt# = t#
frames = frames + 1
If frames => _TIME Then
Delete First(PATH)
frames = frames - 1
EndIf
EndIf
DrawGame
Color 255,0,0
Text 0,0,"Time: "+frames
DrawScreen
Until KeyHit(1)