Tyhmät kysymykset (I/2011)

Voit pyytää apua ohjelmointiongelmiin täältä.
Tuxi
Active Member
Posts: 190
Joined: Wed Jan 21, 2009 10:25 pm
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Tuxi »

Miten saan hypyn korkeuden pysymään vakiona FPS-riippumattomassa tasoloikassa? Hypyn korkeus nimittäin näyttää kasvavan FPS:n laskiessa, milloin nopeuskerroin on suurempi.
EDIT:

Löysin vian eri paikasta, kun missä luulin sen olevan. Olin nimittäin tehnyt hypyn sillä tavalla, että mitä kauemmin hyppynappia painetaan, sitä korkeampi hyppy. En tietenkään ollut muistanut muuttaa sitä viritelmää FPS-riippumattomaksi.

Last edited by Tuxi on Wed Nov 30, 2011 11:39 am, edited 1 time in total.
Projektit:
Jotain pientä (Ehkä vähän suurempaakin)

-Tuxi- (myös Tuxi4321)
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by axu »

Tuxi wrote:Miten saan hypyn korkeuden pysymään vakiona FPS-riippumattomassa tasoloikassa? Hypyn korkeus nimittäin näyttää kasvavan FPS:n laskiessa, milloin nopeuskerroin on suurempi.
Kiihtyvyyksiäkin (eli myös ns. gravitaatiovakio) pitää muuttaa, kun nopeudet muuttuu frametimen mukaan. En nyt muista miten päin asia piti hoitaa :D
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
FIN_MetsaSusi

Re: Tyhmät kysymykset (I/2011)

Post by FIN_MetsaSusi »

Yritin luoda Field Tyypin tileBld johon on määritetty muuttujat tile_X ja tile_Y. Arvon newTile\tile_x:lle ja newTile\tile_y:lle sijainnin käyttämällä randia. Esim. newTile\tile_x=Rand(1,9) (piirtovaiheessa heitellään tileruudukon oikeaan kohtaan). Mutta sitten on sellainen ongelma että tiilit tuppaavat menemään päällekkäin enkä onnistunut tekemään tarkistusta jolla tämän välttäisi täydellisesti. Ensiksi tuli mieleen että nehän pitää tarkistaa jotenkin seuraavanlaisella pätkällä:

Code: Select all

If newTile\tile_x = newTile\tile_x And newTile\tile_y = newTile\tile_y Then newTile\tile_x=Rand(1,9)...
Tai:

Code: Select all

If newTile\tile_x = iTile\tile_x And newTile\tile_y = iTile\tile_y Then newTile\tile_x=Rand(1,9)...
Ilmeisesti tarkistus toimii - kerran - mutta jos tilet sattuvat menemään uudestaan päällekkäin niin siinäpä sitä sitten ollaan. Mitään ideoita pomminvarmasta tarkistuksesta? Piirtovaihe ei saisi alkaa ellei kenttä ole vielä valmis.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus »

FIN_MetsaSusi wrote:Yritin luoda Field Tyypin tileBld johon on määritetty muuttujat tile_X ja tile_Y. Arvon newTile\tile_x:lle ja newTile\tile_y:lle sijainnin käyttämällä randia. Esim. newTile\tile_x=Rand(1,9) (piirtovaiheessa heitellään tileruudukon oikeaan kohtaan). Mutta sitten on sellainen ongelma että tiilit tuppaavat menemään päällekkäin enkä onnistunut tekemään tarkistusta jolla tämän välttäisi täydellisesti. Ensiksi tuli mieleen että nehän pitää tarkistaa jotenkin seuraavanlaisella pätkällä:

Code: Select all

If newTile\tile_x = newTile\tile_x And newTile\tile_y = newTile\tile_y Then newTile\tile_x=Rand(1,9)...
Tai:

Code: Select all

If newTile\tile_x = iTile\tile_x And newTile\tile_y = iTile\tile_y Then newTile\tile_x=Rand(1,9)...
Ilmeisesti tarkistus toimii - kerran - mutta jos tilet sattuvat menemään uudestaan päällekkäin niin siinäpä sitä sitten ollaan. Mitään ideoita pomminvarmasta tarkistuksesta? Piirtovaihe ei saisi alkaa ellei kenttä ole vielä valmis.
Tee tähän tyyliin:

Code: Select all

newTile.tiles = New (tiles)
asdasdad:
lolol = False
newTile\tile_x = Rand (1,9)
newTile\tile_y = Rand (1,9)
For itile.tiles = Each tiles
    If <tässä kohtaa tarkastetaan, onko yhdenkään kanssa samassa paikassa mutta en nyt jaksa selaimella koodata> Then lolol = True
Next itile
If lolol Then Goto asdasdad
jätkä

Re: Tyhmät kysymykset (I/2011)

Post by jätkä »

tuli tämmönen ongelma kun teen zombipeliä eli kun tyypin pitäisi kuolla niin se ei kuole. kuolema on tehty if lausekkeella

kuoleman koodi

Code: Select all

If Health <1 Then Goto kuolit
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

jätkä wrote:tuli tämmönen ongelma kun teen zombipeliä eli kun tyypin pitäisi kuolla niin se ei kuole. kuolema on tehty if lausekkeella

kuoleman koodi

Code: Select all

If Health <1 Then Goto kuolit
Jos Health-muuttujan arvo on oikeasti pienempi kuin yksi ja tuo If-lauseke käydään pelissä läpi, sekä "kuolit"-kohdassa tehdään kuoloon liittyvät hommat niin tyypin pitäisi kuolla. Eli olet tehnyt jotain edellä olevista väärin. Enempää en osaa sanoa, ellet anna hyvin tarkkaa selitystä siitä että miten olet toteuttanut pelimekaniikan koodillisesti. Helpoiten tämän saat jaettua vilauttamalla lähdekoodiasi.
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
jätkä

Re: Tyhmät kysymykset (I/2011)

Post by jätkä »

VesQ wrote:
jätkä wrote:tuli tämmönen ongelma kun teen zombipeliä eli kun tyypin pitäisi kuolla niin se ei kuole. kuolema on tehty if lausekkeella

kuoleman koodi

Code: Select all

If Health <1 Then Goto kuolit
Jos Health-muuttujan arvo on oikeasti pienempi kuin yksi ja tuo If-lauseke käydään pelissä läpi, sekä "kuolit"-kohdassa tehdään kuoloon liittyvät hommat niin tyypin pitäisi kuolla. Eli olet tehnyt jotain edellä olevista väärin. Enempää en osaa sanoa, ellet anna hyvin tarkkaa selitystä siitä että miten olet toteuttanut pelimekaniikan koodillisesti. Helpoiten tämän saat jaettua vilauttamalla lähdekoodiasi.
Huomasin juuri että jos saan scorea niin tuo kuoleminen ei toimi, jos alussa vaan seison ja annan zombin tappaa mua niin kuolen.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 »

jätkä wrote: Huomasin juuri että jos saan scorea niin tuo kuoleminen ei toimi, jos alussa vaan seison ja annan zombin tappaa mua niin kuolen.
Kristallipalloni on valitettavasti hieman vanhentunutta mallia ja on kovin sumuinen, joten en oikein näe mitään muuta kuin että todennäköisesti olet pisteiden laskentannassa muutat jossain vaiheessa epähuomiossa elkkuja, tai sitten pisteiden määrä sotkee jotenkin kuolemista. Suosittelen laittamaan koodia esille, niin ei tarvitse käyttää kristallipalloa.
tilehemmo

Re: Tyhmät kysymykset (I/2011)

Post by tilehemmo »

Tuli ongelma vastaan fantasia pelissä. Eli miten saan tyypin kävelemään katon alla kartassa. Eli kun kävelen niin se tyyppi on siinä päällä eikä alla.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 »

tilehemmo wrote:Tuli ongelma vastaan fantasia pelissä. Eli miten saan tyypin kävelemään katon alla kartassa. Eli kun kävelen niin se tyyppi on siinä päällä eikä alla.
Varmaankin käytät ihan tilekarttasysteemiä? Sinun pitää laittaa katto tilekartan päälliskerrokseen pohjakerroksen sijaan. Objektit piirretään tilekartassa pohja- ja pintakerrosten väliin.
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by temu92 »

Pelaaja liikkuu nuolista. Tasossa x=seinä, .=lattia ja p=pelaajan aloituspaikka. Tosta tota voi sit lähtee kehittämään pistämällä useempia tiletyyppejä ja yksiväristen laatikoiden sijasta käyttää tilejä. Tuossa ny ei oo kyl tiedostosta lukemista mutta sen tekeminen onnistuu tuohon päälle ihan helposti, vaan lataat taulukkoon tiedon tiedostosta sen sijaan että kirjoitat koodieditorissa.

Code: Select all

SCREEN 800, 600

// Leveli taulukkoon
Dim level(6) As String

level(0) = "xxxxxxx"
level(1) = "x.....x"
level(2) = "x.....x"
level(3) = "xxx...x"
level(4) = "x...p.x"
level(5) = "x.....x"
level(6) = "xxxxxxx"

// Pelaajan koordinaatit
px = 0
py = 0

Dim c As String

// Etsitään pelaajan aloituspaikka tasosta
For y=0 To 6
	For x=1 To Len(level(y))
		c = Mid(Str(level(y)), x, 1)
		
		// Jos pelaajan aloituspaikka löydetään niin alustetaan pelaajan koordinaatit siihen paikkaan
		If c = "p" Then
			px = x
			py = y
		EndIf
	Next x
Next y

// Päälooppi
Repeat
	// Mennään levelitaso läpi ja tarkistetaan mitä ON missäkin
	For y=0 To 6
		For x=1 To Len(level(y))
			c = Mid(Str(level(y)), x, 1)
			
			// Katsotaan mikä osa ON mapissa
			Select c
				Case "x" // Seinä
					Color 255, 255, 255
					Box 20+x*40, 60+y*40, 38, 38, True
				Case "." // Lattia
					Color 40, 40, 40
					Box 20+x*40, 60+y*40, 38, 38, True
				Case "p" // Pelaajan aloituspaikka (lattia)
					Color 60, 40, 40
					Box 20+x*40, 60+y*40, 38, 38, True
			EndSelect
		Next x
	Next y
	
	// Liikkuminen nuolilla
	If KeyHit(203) Then // Left
		If Mid(Str(level(py)), px-1, 1) <> "x" Then
			px-1
		EndIf
	ElseIf KeyHit(205) Then // Right
		If Mid(Str(level(py)), px+1, 1) <> "x" Then
			px+1
		EndIf
	ElseIf KeyHit(200) Then // Up
		If Mid(Str(level(py-1)), px, 1) <> "x" Then
			py-1
		EndIf
	ElseIf KeyHit(208) Then // Down
		If Mid(Str(level(py+1)), px, 1) <> "x" Then
			py+1
		EndIf
	EndIf
	
	// Piirretään pelaaja
	Color 255, 0, 0
	Box 20+px*40+10, 60+py*40+10, 20, 20, True
	
	DrawScreen
Forever
gfhgiregre

Re: Tyhmät kysymykset (I/2011)

Post by gfhgiregre »

Code: Select all

pis1=47
ott1=26

tulos=pis1/ott1

AddText ""+tulos+""
DrawScreen
WaitKey
Miksi vastaus on 1, eikä 1,80769....?
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2011)

Post by koodaaja »

gfhgiregre: Lasket kokonaisluvuilla. Laittamalla #-merkin muuttujien nimien perään (pis1#, ott1# ja tulos#) saat liukulukuvastauksen.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 »

gfhgiregre wrote:

Code: Select all

pis1=47
ott1=26

tulos=pis1/ott1

AddText ""+tulos+""
DrawScreen
WaitKey
Miksi vastaus on 1, eikä 1,80769....?
Koska lasket kokonaisluvuilla.
Ainakin toinen luvuista täytyy olla liukuluku, että käytettäisiin liukulukulaskentaa ja sitten myös muuttuja johon vastaus tallennetaan on kokonaislukumuuttuja. Laita muuttujan perään # -merkki jos haluat siitä desimaaliluvun tai sitten vaihtoehtoisesti laita muuttujan nimen jälkeen "As Float".

Code: Select all

pis1#=47
ott1 As Float=26

tulos#=pis1/ott1

AddText ""+tulos+""
DrawScreen
WaitKey
EDIT:

Koodaaja ehti ensin... :lol:

Smulitron
Newcomer
Posts: 8
Joined: Mon Dec 10, 2007 10:25 pm

Re: Tyhmät kysymykset (I/2011)

Post by Smulitron »

Hei!

Minulla olisi kehitteillä sellainen bullet hell-tyyppinen peli. Olen koodannut siihen jo vihuja ja aseita käyttäen typejä, mutta typet ovat olleet aina eräänlainen musta kohta koodaustietoudessani, joten selittäkää nyt tietämättömälle kuinka eri typet pystyvät olemaan samassa. Joka kerta kun yritän laittaa komentoja joissa on kahta eri typeä, tulee MAV.
Tarkemmin pelistäni: yritän tällä hetkellä saada pelaajan panokset tekemään damagea ja häviämään osuessaan viholliseen. Noh, hain ratkaisua pulmaani siirtämällä "Next Vihu":n ja "Next Attack":n kauemmaksi, mikä toimi välillä, mutta välillä taas ei. Tietääkseni ns. viitteet eivät ole globaaleja, joten ainoa ratkaisu tuntui olevan Next:in siirtäminen. Sitten kuitenkin MAVia pukkaa vissiin jos se on huonossa paikassa.


Eli jos saisin vaikka jonkinlaisen esimerkin miten kaksi typeä voivat olla "sisäkkäin"/ kahden typen käyttö esimerkiksi objectsoverlap():ssa mahdollisimman toimivasti ja selityksen kera, olisin kiitollinen.
endif

drawscreen
until virtanappi ()
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Tyhmät kysymykset (I/2011)

Post by MrMonday »

Tyypit ovat olleet itsellenikin aina vaikeita sisäistää, mutta sen verran osaan neuvoa, että ezben aikoinaan kirjoittama Type-tutoriaali on erinomaista matskua selventävien esimerkkien kera. 2. osassa käytiin läpi mainitsemiasi asioita, joten sieltä saattaisit löytää ratkaisun ongelmaasi ;)
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 »

Smulitron wrote:Hei!

Minulla olisi kehitteillä sellainen bullet hell-tyyppinen peli. Olen koodannut siihen jo vihuja ja aseita käyttäen typejä, mutta typet ovat olleet aina eräänlainen musta kohta koodaustietoudessani, joten selittäkää nyt tietämättömälle kuinka eri typet pystyvät olemaan samassa. Joka kerta kun yritän laittaa komentoja joissa on kahta eri typeä, tulee MAV.
Tarkemmin pelistäni: yritän tällä hetkellä saada pelaajan panokset tekemään damagea ja häviämään osuessaan viholliseen. Noh, hain ratkaisua pulmaani siirtämällä "Next Vihu":n ja "Next Attack":n kauemmaksi, mikä toimi välillä, mutta välillä taas ei. Tietääkseni ns. viitteet eivät ole globaaleja, joten ainoa ratkaisu tuntui olevan Next:in siirtäminen. Sitten kuitenkin MAVia pukkaa vissiin jos se on huonossa paikassa.


Eli jos saisin vaikka jonkinlaisen esimerkin miten kaksi typeä voivat olla "sisäkkäin"/ kahden typen käyttö esimerkiksi objectsoverlap():ssa mahdollisimman toimivasti ja selityksen kera, olisin kiitollinen.
Kahden sisäkkäin olevan for-each silmukan tekeminen onnistuu näin:

Code: Select all

Type panokset
    Field obj // Panoksen objekti
EndType

Type vihut
    Field obj //Vihollisen objekti
EndType




For vihu.vihut = Each vihut //Kelataan kaikki viholliset jotka ovat
                            //vihut typessä läpi. Tämän hetkinen vihollinen on vihu muuttujassa
    
    For panos.panokset = Each panokset  //Käydään läpi kaikki panokset.
                                        //Tämän hetkinen panos on muuttujassa panos
        If ObjectsOverlap(vihu\obj,panos\obj) Then  //Tarkistetaan onko tällä hetkellä
                                        //käsittelyssä oleva vihollinen panoksen päällä
            //...
        EndIf
    Next panos
Next vihu
Ja niin kuin MrMondaykin mainitsi, niin kannattaa lukea Ezben Type-tutoriaali.
Smulitron
Newcomer
Posts: 8
Joined: Mon Dec 10, 2007 10:25 pm

Re: Tyhmät kysymykset (I/2011)

Post by Smulitron »

Kiitos avusta! Paneudun huomenna tutoriaaliin ja koodiin.
endif

drawscreen
until virtanappi ()
User avatar
Konstaduck
Advanced Member
Posts: 267
Joined: Sat Dec 17, 2011 3:09 pm
Location: Nurmijärvi, Finland
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Konstaduck »

No niin, tuli rekisteröidyttyä foorumeille.

Mutta Asiaan

on sellainen pulma, että haluaisin liukuvan valintaikkunan ohjelmaani. on siis cbSDK:n list - komennosta kyse.

Kun jotain "itemiä" listassa kaksoisnapsautetaan, ohjelma aloittaa videon. En siis vaan osaa tätä tehdä.

Kiitos jo etukäteen kaikille, jotka auttavat.
EDIT:

niin ja asia oli kiireinen

EDIT:

Jäin sitten ilman vastausta :(

Last edited by Konstaduck on Tue Dec 20, 2011 9:46 pm, edited 1 time in total.
Konstaduck.net
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
onkelma

Re: Tyhmät kysymykset (I/2011)

Post by onkelma »

Hei!

Kyseessä on tasohyppely ja pelihahmon pitäisi tikkaitten kohdalla liikkua ylöspäin. Olen asiaa yrittänyt toteuttaa datakerroksella. Numero 1 laitoin tikkaitten kohdalle. Enkä nyt ole oikein saanut sitä toimimaan.

Code: Select all

 If GetMap2(3,x,y)=1 And ObjectsOverlap (3,x,y=1,pelihahmo) Then 
                                 yPlus#=0.5
                                 EndIf  
tai tämmöstäkin kokeillut.

Code: Select all

tile=GetMap2(3,ObjectX(pelihahmo),ObjectY(pelihahmo))If ObjectsOverlap (tile+1,pelihahmo) And KeyDown(cbKeyW)Then 
     yPlus#=0.5
    EndIf 
Locked