Ajastin ongelma

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
sähkömies
Newcomer
Posts: 14
Joined: Mon Sep 29, 2008 6:22 pm

Ajastin ongelma

Post by sähkömies »

Code: Select all

Function lippaantäyttö()
aika=timer()    //aika haetaan

    If KeyHit(28) And gCurrentWeapon=WPN_PISTOL and timer()>aika+2000 Then lipas1=7      //Yritin...

 
EndFunction
Haulla en löytänyt vastausta. Siis, en kykene millään löytämään keinoa jolla saisin niin, että lipas täyttyy aina uudestaan kahden sekunnin kuluttua enterin painamisesta?
Eli kun painaa enteriä, ukko lataa lipasta kaksi sekuntia, ja lipas täyttyy.
cbaloittelija
Newcomer
Posts: 30
Joined: Sat Feb 06, 2010 8:20 pm

Re: Ajastin ongelma

Post by cbaloittelija »

Code: Select all


if keydown(57) then gosub täytäLipas

repeat
.........
forever
.............

täytäLipas:
repeat
if muuttuja < [frameset * 2]  then ' 2 sekuntia aikaa 
muuttuja+1
endif
if muuttuja = [frameset * 2] then lipas\ammukset = lipas\max_ammukset
forever
return
................
return
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Ajastin ongelma

Post by temu92 »

About tällä tavalla:

Code: Select all

lipasmax	= 10
lipas		= 0
latausaika	= 2000 // millisekunteina

Repeat
	If KeyHit(19) And lataa = False And lipas = 0 Then
		lataustimer = Timer()+latausaika
		lataa		= True
	ElseIf lataa = True And Timer() >= lataustimer Then
		lipas		= lipasmax
		lataa		= False
	EndIf
	
	Text 10, 10, lipas+" / "+lipasmax
	
	If lipas = 0 And lataa = False Then
		Text 10, 30, "Paina R ladataksesi"
	ElseIf lataa = True Then
		Text 10, 30, "Ladataan..."
	EndIf
	
	DrawScreen
Forever
Ja mikäköhän toikin cbaloittelijan viritelmä on? Typejä ei ole missään määritelty etc :o
sähkömies
Newcomer
Posts: 14
Joined: Mon Sep 29, 2008 6:22 pm

Re: Ajastin ongelma

Post by sähkömies »

En saanut vieläkään tuota toimimaan,
eli mulla on eri lippaat eri aseille, lipas1, lipas2, lipas3, lipas4, lipas5, lipas6.

Miten siis saisin, että lipas1:ellä kestää latautua X sekuntia ja latautuu täyteen 7 kutiin asti.
Ja sitten lipas2:ellä kestää latautua Y sekuntia 35 kutiin asti.
jne...

Pää hajoo..
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Ajastin ongelma

Post by valscion »

Voit toteuttaa tuon helposti taulukolla. Väsäsin sinulle esimerkin tuosta temu92:sen esimerkin pohjalta

Code: Select all

// Vakioita, jotka helpottavat taulukon käsittelyä
Const GUN_CURAMMO    = 0
Const GUN_MAXAMMO    = 1
Const GUN_RELOADTIME = 2

Dim GUNS(5,2)
// Kaksiulotteinen taulukko, jonka ekassa ulottuvuudessa on
// käytettävissä oleva ase ja tokassa lippaassa olevat ammukset,
// lippaan koko ja latausaika (millisekunteina). Niinkuin näin:
// GUNS( ase, 0 ) = 12 <-- kuteja tällä hetkellä
// GUNS( ase, 1 ) = 30 <-- max. kuteja
// GUNS( ase, 2 ) = 2000 <-- 2sek. latausaika
For i=0 To i=5
    // Kaikki aseet "tyhjäksi"
    GUNS( i, GUN_CURAMMO ) = 0
Next i
GUNS( 0, GUN_MAXAMMO ) = 60 : GUNS( 0, GUN_RELOADTIME ) = 4000 // max.60 -> 4.0s
GUNS( 1, GUN_MAXAMMO ) = 45 : GUNS( 1, GUN_RELOADTIME ) = 2500 // max.45 -> 2.5s
GUNS( 2, GUN_MAXAMMO ) = 22 : GUNS( 2, GUN_RELOADTIME ) = 5000 // max.22 -> 5.0s
GUNS( 3, GUN_MAXAMMO ) = 14 : GUNS( 3, GUN_RELOADTIME ) = 1000 // max.14 -> 1.0s
GUNS( 4, GUN_MAXAMMO ) = 7  : GUNS( 4, GUN_RELOADTIME ) = 10000// max.7 -> 10.0s
GUNS( 5, GUN_MAXAMMO ) = 2  : GUNS( 5, GUN_RELOADTIME ) = 5000 // max.2 -> 5.0s

lataa=False // Ladataanko jotain asetta?
ase=0 // Käytettävissä oleva ase

Repeat
    If KeyHit(19) And lataa = False And GUNS( ase, GUN_CURAMMO ) = 0 Then
        // Jos painetaan R, eikä aseita ladata ja ase on tyhjä, niin
        // asetetaan ajastimeen nykyinen aika + lataamiseen kuluva aika
        // ja asetetaan muuttujan "lataa" arvo todeksi.
        lataustimer = Timer()+GUNS( ase, GUN_RELOADTIME )
        lataa      = True
    ElseIf lataa = True And Timer() >= lataustimer Then
        // Jos ladataan ja latausaika on kulunut, niin ase on täynnä
        GUNS( ase, GUN_CURAMMO ) = GUNS( ase, GUN_MAXAMMO )
        lataa = False // lataus on ohi
    EndIf
    
    // Aseen vaihto. Vain jos EI ladata tällä hetkellä mitään asetta!
    If lataa = False Then
        If KeyHit(cbKeyUp) Then ase=ase+1
        If KeyHit(cbKeyDown) Then ase=ase-1
    EndIf
    
    // Aseita välillä 0-5
    If ase<0 Then ase=5
    If ase>5 Then ase=0
   
    Text 10, 10, GUNS( ase, GUN_CURAMMO ) + " / " + GUNS( ase, GUN_MAXAMMO ) + " >> ase-ID: " + ase
   
    If GUNS( ase, GUN_CURAMMO ) = 0 And lataa = False Then
        Text 10, 30, "Paina R ladataksesi"
    ElseIf lataa = True Then
        Text 10, 30, "Ladataan..."
    EndIf
   
    If lataa=False Then
        Text 10, 50, "Vaihda asetta nuolinäppäimillä ylös ja alas"
    Else
        Text 10, 50, "Latausta jäljellä: " + (lataustimer-Timer()) + "ms"
    EndIf
    DrawScreen
Forever 
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
sähkömies
Newcomer
Posts: 14
Joined: Mon Sep 29, 2008 6:22 pm

Re: Ajastin ongelma

Post by sähkömies »

Miten saan liitettyä tuon omaan koodiini? Kun mulla on jo oma asetaulukko, jossa on jo kaikki tiedot aseesta.
Tässä AKn tiedot

Code: Select all

//AK
aWeapon(WPN_AK, WPNF_CHARACTER)         = LoadObject jne      //Ukko1 kuva ak kädessä
aWeapon(WPN_AK, WPNF_CHARACTER2)       = LoadObject jne     // Ukko2 sama
aWeapon(WPN_AK, WPNF_RELOADTIME)        = 150                       // Kauanko kestää että aseella voi ampua uudestaan
aWeapon(WPN_AK, WPNF_BULLET)                = LoadObject jne     //luodin kuva
aWeapon(WPN_AK, WPNF_BULLETSPEED)       = 40                        //nopeus...
aWeapon(WPN_AK, WPNF_BULLET_FORTH)    = 15                       //paikka
aWeapon(WPN_AK, WPNF_BULLET_YAW)        = 8                        //paikka
aWeapon(WPN_AK, WPNF_IMAGE)                  = LoadImage jne    //aseen kuva
aWeapon(WPN_AK, WPNF_SPREAD)                = 3                        //hajonta
aWeapon(WPN_AK, WPNF_SHOOTSOUND)       = LoadSound jne    //ääni
aWeapon(WPN_AK, WPNF_HIT)                      = 10                      //damagea

Code: Select all

gCurrentWeapon = WPN_PISTOL  //Mikä ase ny kädessä kummillakin ukoilla
gCurrentWeapon2 = WPN_PISTOL
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Ajastin ongelma

Post by Awaclus »

copy+paste?
Post Reply