Tyhmät kysymykset (I/2012)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Tyhmät kysymykset (I/2012)

Post by MrMonday » Sun Oct 28, 2012 10:11 am

Latexi95 wrote:Enkä voisit tehdä Typen johon laitat erikoistilen koordinaatit kun aktivoit sen. Sitten on olet liikkunut niin voit verrata koordinaatteja typessä oleviin. Mikäli ollaan jo liian kaukana, niin vaihdetaan tile takaisin ja poistettaan typen jäsen.
Jotain tuon kaltaista voisi kyllä miettiä, jos nyt ei mitään muuta keksi, mutta tyypeillä sen voisi saada hoidettua. Pitäisi muutenkin siistiä koodista monet taulukot tyypeiksi, kun jotenkin fiksumpia monessa kohtaa.

User avatar
Akuji
Member
Posts: 60
Joined: Fri Oct 08, 2010 5:59 pm
Location: Turku
Contact:

Re: Tyhmät kysymykset (I/2012)

Post by Akuji » Wed Nov 07, 2012 9:29 pm

Olen tässä väsäillyt systeemiä jolla voi valita soitettavan kappaleen jonka voi sitten kuunnella painamalla välilyöntiä.
Ongelma on kuitenkin siinä, kun yritän pysäyttää kappaleen niin ohjelma heittää "Unknown runtime exception" tai "Memory access violation" -virheilmoitusta vuorotellen.
Miten saisin koodin toimimaan siten että kappaleen soitto lopetetaan välittömästi välilyöntiä uudestaan painettaessa?

Code: Select all

Include "sdk/include/cbAPI.cb"
playmusic=OFF

If FileDialog(OPEN_FILE_DLG, "*.*", "", "|*.*|") = IDOK Then
    play = LoadSound(FileDialogData(FD_FULLNAME))
EndIf


Repeat

If KeyHit(cbkeyspace) Then
        playmusic=Not playmusic
If playmusic Then
        PlaySound play
    Else
        StopSound play
    EndIf
EndIf


    Text 10,10,"Press space to play and stop the music"


DrawScreen
Until EscapeKey()

User avatar
valscion
Moderator
Moderator
Posts: 1587
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2012)

Post by valscion » Wed Nov 07, 2012 9:47 pm

Akuji wrote:Olen tässä väsäillyt systeemiä jolla voi valita soitettavan kappaleen jonka voi sitten kuunnella painamalla välilyöntiä.
Ongelma on kuitenkin siinä, kun yritän pysäyttää kappaleen niin ohjelma heittää "Unknown runtime exception" tai "Memory access violation" -virheilmoitusta vuorotellen.
Miten saisin koodin toimimaan siten että kappaleen soitto lopetetaan välittömästi välilyöntiä uudestaan painettaessa?
Manuaalissa lukee LoadSoundin kohdalla seuraavasti: Lataa äänitiedoston muistiin, jotta sitä voitaisiin soittaa. Yleensä isot äänitiedostot (musiikit) kannattaa soittaa suoraan kovalevyltä muistin säästämiseksi (PlaySound-komento), mutta pienet efektit, joita käytetään paljon, kannattaa ladata muistiin.

Ehkä sinun kannattaisi kokeilla tallentaa play-muuttujaan suoraan PlaySoundin palauttama arvo, jonka sitten tarvittaessa pysäytät. Sitten kun haluat uudelleen aloittaa toistamisen, kutsut vain playsoundia uudelleen ja tallennat sen arvon taas muuttujaan. Eli vähän samalla tavalla kuin StopSound-komennon esimerkissä.

En koodistasi sinänsä löydä mitään virhettä. Yhden iffin sisennys on tosin vähän jännästi ja se meinasi aluksi hämätä.
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

User avatar
Latexi95
Guru
Posts: 1164
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Tyhmät kysymykset (I/2012)

Post by Latexi95 » Wed Nov 07, 2012 10:34 pm

Minä löydän tuosta virheen. Se on nimenomaan se, että StopSoundille annetaan LoadSoundilta saatu ääni eikä PlaySoundilta saatu kanavamuuttuja. Se todennäköisesti aiheuttaa ongelman.

User avatar
valscion
Moderator
Moderator
Posts: 1587
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2012)

Post by valscion » Thu Nov 08, 2012 6:58 pm

Latexi95 wrote:Minä löydän tuosta virheen. Se on nimenomaan se, että StopSoundille annetaan LoadSoundilta saatu ääni eikä PlaySoundilta saatu kanavamuuttuja. Se todennäköisesti aiheuttaa ongelman.
Aivan tosiaan. PlaySoundinhan palautusarvo oli se joka StopSoundille piti antaa :)
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

Kumiankka
Member
Posts: 65
Joined: Wed May 18, 2011 5:17 pm
Location: Artjärvi

Re: Tyhmät kysymykset (I/2012)

Post by Kumiankka » Fri Nov 09, 2012 11:02 pm

Mitenköhän mahtaisi onnistua CurveAngle:n tai CurveValue:n toteuttaminen FPS-riippumattomasti delta-arvon avulla?

User avatar
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Tyhmät kysymykset (I/2012)

Post by Viltzu » Sat Nov 10, 2012 10:56 am

Kumiankka wrote:Mitenköhän mahtaisi onnistua CurveAngle:n tai CurveValue:n toteuttaminen FPS-riippumattomasti delta-arvon avulla?
Multiplier on delta-arvo sopivasti suhteutettuna.

Code: Select all

Function smooth#(_new#,_old#,_smooth#)
    Return _old + (_new - _old) * (1.0 / _smooth) * multiplier
EndFunction

Paskatraali

Re: Tyhmät kysymykset (I/2012)

Post by Paskatraali » Mon Dec 10, 2012 8:59 pm

Nyt on pää ihan jumissa enkä mitenkään keksi, miten teen apulinjat hiirenosoittimelle mitä pitkin se sitten liikkuu.
Eli pitäis saada hiirenosotin liikkumaan ruudulla 32pikselin välein y ja x akselilla
voin tietysti tehä

Code: Select all

If mousewx()=400 or mousewx()=368 or mousewx()=336 then
siirrä osoitin hiirenx koordinaattiin
If mousewy()=400 or mousewy()=368 or mousewy()=336 then
siirrä osoitin hiireny koordinaattiin
ja screeni on 800pikselii eli pitäis tehä -400asti toi homma

User avatar
valscion
Moderator
Moderator
Posts: 1587
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2012)

Post by valscion » Mon Dec 10, 2012 10:37 pm

Paskatraali wrote:Nyt on pää ihan jumissa enkä mitenkään keksi, miten teen apulinjat hiirenosoittimelle mitä pitkin se sitten liikkuu.
Eli pitäis saada hiirenosotin liikkumaan ruudulla 32pikselin välein y ja x akselilla
voin tietysti tehä

Code: Select all

If mousewx()=400 or mousewx()=368 or mousewx()=336 then
siirrä osoitin hiirenx koordinaattiin
If mousewy()=400 or mousewy()=368 or mousewy()=336 then
siirrä osoitin hiireny koordinaattiin
ja screeni on 800pikselii eli pitäis tehä -400asti toi homma
Kannattaa tehdä niin että piilotat varsinaisen hiiren ja käytät jotain valmista hiirtä esittävää kuvaa ikään kuin kursorina. Piirrät tämän kuvan vain hiiren koordinaatin määrittämiin, tietyssä ruudukossa oleviin kohtiin. Esimerkki ja sen kommentit toivottavasti havainnollistavat, että miten moinen onnistuisi.

Code: Select all

' Luodaan vähän isompi ruutu, parempi testi
SCREEN 640, 480

' Ladataan kursoria esittävä kuva
cursorImg = LoadImage("Media/cursor.bmp")

' Asetetaan ladatun kuvan piirtokeskipisteeksi kuvan keskipiste.
' Tämä siksi että kuvassa kursorin kohtaa osoittava pää on tasan
' kuvan keskellä.
HotSpot cursorImg

' Piilotetaan varsinainen hiiri
ShowMouse OFF

Repeat
    ' Piirretään selkeyden vuoksi 32*32 ruudukko kahdella sisäkkäisellä
    ' for-silmukalla
    Color cbDark
    For x = 0 To ScreenWidth() Step 32
        For y = 0 To ScreenHeight() Step 32
            ' Ylhäältä alas
            Line x, 0, x, ScreenHeight()
            ' Vasemmalta oikealle
            Line 0, y, ScreenWidth(), y
        Next y
    Next x

    ' Lasketaan hiiren koordinaatit 32 pikselin välein olevalla matkalla.
    ' Koska MouseX ja MouseY palauttavat kokonaisluvun, näiden jakaminen
    ' luvulla 32 tuottaa aina alaspäin pyöristetyn kokonaisluvun -
    ' esimerkiksi laskutoimitus ( 50 / 32 ) tuottaisi luvun 1. Kun tämän
    ' jälkeen saatu luku kerrotaan uudelleen 32:lla, saadaan 32:n pikselin
    ' välin menevä luku.
    mx = (MouseX() / 32) * 32
    my = (MouseY() / 32) * 32
   
    ' Piirretään hiiren paikkaa osoittava kuvamme lasketuille arvoille
    DrawImage cursorImg, mx, my
    
    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

KlngiShitti

Re: Tyhmät kysymykset (I/2012)

Post by KlngiShitti » Tue Dec 11, 2012 5:56 pm

Mikäs tossa on vikana kun toi cursorimg1 menee ihan erikohtaan kun cursorimg

Code: Select all

Type objektit 
    Field obj 
End Type 



SCREEN 800,800


muuri=LoadObject("Media\palikka.bmp")

ShowObject muuri,OFF



cursorImg1 = LoadObject("Media/target.bmp")

cursorImg = LoadObject("Media/target.bmp")

' Asetetaan ladatun kuvan piirtokeskipisteeksi kuvan keskipiste.
' Tämä siksi että kuvassa kursorin kohtaa osoittava pää on tasan
' kuvan keskellä.


' Piilotetaan varsinainen hiiri
ShowMouse OFF

Repeat

    Color cbDark
    For x = 0 To ScreenWidth() Step 32
        For y = 0 To ScreenHeight() Step 32
            
            Line x, 0, x, ScreenHeight()
           
            Line 0, y, ScreenWidth(), y
        Next y
    Next x

    '
    
 

    
    
  
    mx = (MouseWX() / 32) * 32
    my = (MouseWY() / 32) * 32
    
    
    
        If MouseHit(1) Then  
        
        seinä.objektit = New(objektit) 'luo uusi ammus
        seinä\obj=CloneObject(muuri) 'tee klooni
        'asetetaan pati samaan paikkaan
        
        PositionObject seinä\obj,mx,my
        ObjectOrder seinä\obj,-1
           numero=numero+1
    EndIf
    
    For seinä.objektit = Each objektit
    If MouseDown(2) And ObjectsOverlap(cursorimg,seinä\obj) Then
    DeleteObject seinä\obj
    Delete seinä
    EndIf
    
       Next seinä
   
    
    PositionObject cursorImg, MouseWX(),MouseWY()
    
    PositionObject cursorImg1, mx,my
    Text 0,0,numero
    Text 0,20,MouseWX()+" "+MouseWY()
    DrawScreen
Forever

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2012)

Post by Jonez » Tue Dec 11, 2012 8:09 pm

Tässä on kaksi ongelmaa. Ensinnäkin, kun haluat keskittää objektin joka 32 pikselin välein, et oikeastaan halua toimia pikeleiden 0, 32, 64, jne kanssa, vaan itse asiassa niiden "puolikkaiden", eli 0 + 16, 32 + 16 (48)..., jne, koska haluat asettaa objektin gridin keskelle, joka on siis kohdassa x + 16.

Toinen ongelma on nollakoordinaattien kanssa. Tässä tapauksessa en ole ikinä keksinyt mitään muuta ratkaisua, kuin tarkastaa onko hiiri nollakoordinaattien plus- vai miinuspuolella, ja korjata asia sen mukaan.

Eli vaihda tämä kohta koodia:

Code: Select all

mx = (MouseWX() / 32) * 32
my = (MouseWY() / 32) * 32
Tähän:

Code: Select all

mx = ((MouseWX() + 16) / 32) * 32
my = ((MouseWY() + 16) / 32) * 32

//tehdään pieni koordinaattimuunnos origo ylitettäessä
If MouseWX() < -16 Then mx - 32
If MouseWY() < -16 Then my - 32
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

KaiPr12

Re: Tyhmät kysymykset (I/2012)

Post by KaiPr12 » Thu Dec 20, 2012 4:05 pm

Kuinka toteuttaa reaaliaikainen piirtojärjestyksen tarkistus?

Eli olen tekemässä pientä peliä, joka on kuvattu yläviistosta. Ei suoraan ylhäältäpäin, eikä sivusta, vaan n. 45 asteen kulmasta, kuten vanhoilla RPG-peleillä on monesti ollut tapana. Siksi peliin tarvitsisi jonkinlaisen piirtojärjestyksen tarkistuksen, jolla pitäisi tarkistaa että onko jonkin laatikon Y-arvo pienempi kuin toisen. Jos laatikko liikutetaan toisen objektin taakse, edempänä oleva objekti piirretään päällimmäiseksi, ja kun taas laatikko liikutetaan takaisin etualalle se hyppää päällimmäiseksi...

Tiedän että ObjectOrderia voisi käyttää ainakin objekteilla tehtäessä, mutten osaa tuota tarkistusta tehdä järkevästi. Miten tarkistaa mikä objekti piirretään päällimmäiseksi, kun taulukolla on luotu vaikka 50 laatikkoa ja kaikki poukkoilevat ruudulla randomisti x ja y-akselilla? Ja miten toteuttaa tämä ilman objektikäskyjä :o

User avatar
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Tyhmät kysymykset (I/2012)

Post by Wingman » Thu Dec 20, 2012 10:51 pm

KaiPr12 wrote:Kuinka toteuttaa reaaliaikainen piirtojärjestyksen tarkistus?

Eli olen tekemässä pientä peliä, joka on kuvattu yläviistosta. Ei suoraan ylhäältäpäin, eikä sivusta, vaan n. 45 asteen kulmasta, kuten vanhoilla RPG-peleillä on monesti ollut tapana. Siksi peliin tarvitsisi jonkinlaisen piirtojärjestyksen tarkistuksen, jolla pitäisi tarkistaa että onko jonkin laatikon Y-arvo pienempi kuin toisen. Jos laatikko liikutetaan toisen objektin taakse, edempänä oleva objekti piirretään päällimmäiseksi, ja kun taas laatikko liikutetaan takaisin etualalle se hyppää päällimmäiseksi...

Tiedän että ObjectOrderia voisi käyttää ainakin objekteilla tehtäessä, mutten osaa tuota tarkistusta tehdä järkevästi. Miten tarkistaa mikä objekti piirretään päällimmäiseksi, kun taulukolla on luotu vaikka 50 laatikkoa ja kaikki poukkoilevat ruudulla randomisti x ja y-akselilla? Ja miten toteuttaa tämä ilman objektikäskyjä :o
jonkinnäköinen sorttaus y-koordinaatin perusteella on varmasti paikallaan. En itse ole semmosta tehnyt, sillä mun projektit jotka on tuolla kuvakulmalla toteutettu on yleensä perustunut taulukkoon, jonka voi vaan renderöidä oikeassa järjestyksessä (eli taka-ala ensin ja sieltä sitten edetään for-loopissa edemmäs). Taisipa niissä jopa olla jonkinnäköistä hahmospriteä tms., mutta sen piirto taisi tapahtua aina sen tilen kohdalla loopissa jonka päällä se on. Eli toinen tapa on siis tehdä kartta taulukkoon (ns. tilemappi, mutta teetkin sen koodissa), käydä sitä läpi kahdella for-loopilla ja piirtää objektit tilen päälle silloin, kun for-looppien koordinaatit ovat samat kuin objektin koordinaatit.

Pahoittelen selitykseni mahdollista epäselvyyttä, ei ole tullut CBllä koodailtua taas hetkeen..
- - - -

User avatar
Paroni
Newcomer
Posts: 20
Joined: Sun Jan 16, 2011 3:39 am

Re: Tyhmät kysymykset (I/2012)

Post by Paroni » Tue Jan 22, 2013 2:09 pm

Mulla on tyyppi CHARACTER johon joka ikinen hahmo kuuluu, myös pelaajan hahmo (pelaajan hahmo tarkistetaan char\IsControlled -muuttujan avulla joten ohjattavia voi olla myös useampi kuin yksi). Koko peli on kuva-, ei objektipohjainen ja olen yrittänyt väsätä törmäyksentunnistusta perustuen boxoverlap -komentoon. Idea on että jokaisen hahmon neljällä sivulla on "laatikko" ja kun tälläinen laatikko on hahmon pohjan kohdalla niin silloin sen laatikon suuntaan ei pääse enää liikkumaan. Ongelma onkin vain siinä, että systeemi heittää mavia. Tiedän että se johtuu for loopista mutta ilman sitä koko törmäys ei kai teoriassa edes voi toimia? Mikä avuksi?


Koodi avuksi. Kommentointi englanniksi (kutsun koodinpätkiä välillä vain koodiksi ja välillä ohjelmiksi) mutta jos ymärtää niin pitäisi aika hyvin selvitä mitä tuossa tapahtuu ;)

Code: Select all

//<DRAW DISTANCE>
//Here we calculate the draw distance. It is a box that is the size of the screen and it is attached to the camera.
DrawDistX1 = ScreenWidth()/2 + CameraX()
DrawDistX2 = -ScreenWidth()/2 + CameraX()
DrawDistY1 = ScreenHeight()/2 + CameraY()
DrawDistY2 = -ScreenHeight()/2 + CameraY()

//<CHARACTERS>
//This section of the program controls all that is related to characters.
DrawToWorld ON, ON, ON
	For char.CHARACTER = Each CHARACTER
		//<SUMMARY>
		//These few lines of code update the character collision box locations
		char\Col1X = char\PosX
		char\Col1Y = -char\PosY + gTileSize
        Color cbblue
        Box char\Col1X, char\Col1Y, gTileSize, gTileSize
		//<PLAYER MOVEMENT>
		//Player movement is controlled within this section of the program.
		If char\IsControlled = True Then
			//<SUMMARY>
			//This piece of code checks that 1. You are pressing the specified movement key and 2. That you have reached your current waypoint, before it does anything.
			//If both conditions are true, then the facing of the player is altered (the actual representation of this is done in the drawing section).
			//After changing the facing the program checks whether one of your four collision boxes are overlapping another character/collision piece.
			//If true, you won't budge a bit and only play a sound named "bump".
			//If false, the program will move your waypoint to a specified point.
			If KeyDown(CBKeyW) And char\ReachedPos = True Then
				char\Facing = 1
				'For char.CHARACTER = Each CHARACTER
				If BoxOverlap(char\Col1X, char\Col1Y, gTileSize, gTileSize, char\PosX, char\PosY, gTileSize, gTileSize)
					//PlaySound Bump
				Else
					char\MoveY - gTileSize
					char\ReachedPos = False
				EndIf
				'Next char
			ElseIf KeyDown(CBKeyS) And char\ReachedPos = True Then
				char\Facing = 2
			ElseIf KeyDown(CBKeyA) And char\ReachedPos = True Then
				char\Facing = 3
			ElseIf KeyDown(CBKeyD) And char\ReachedPos = True Then
				char\Facing = 4
			EndIf
			//<SUMMARY>
			//This code checks whether you are at your destination.
			//If false it moves you according to your facing.
			If char\ReachedPos = False And char\Facing = 1 Then
				char\PosY - 1
			ElseIf char\ReachedPos = False And char\Facing = 2 Then
			ElseIf char\ReachedPos = False And char\Facing = 3 Then
			ElseIf char\ReachedPos = False And char\Facing = 4 Then
			EndIf
			//<SUMMARY>
			//This code simply checks if you are at your destination and if true, the flag is set to true
			If char\PosX = char\MoveX And char\PosY = char\MoveY Then
				char\ReachedPos = True
			EndIf
		EndIf
		//<CHARACTER DRAWING>
		//Character drawings are controlled within this section of the program
		//<SUMMARY>
		//This program checks whether the character is inside the draw distance. If true then flag to draw the character is set to true, else to false.
		If char\PosX =< DrawDistX1 And char\PosX => DrawDistX2 And char\PosY =< DrawDistY1 And char\PosY => DrawDistY2 Then
			char\IsDrawn = True
		Else
			char\IsDrawn = False
		EndIf
		//<SUMMARY>
		//This program checks whether a flag to draw the character is set to true, and if it is, the character is drawn
		//Future: Disassemble chars to body parts and assemble the parts on screen according to what has been selected.
		If char\IsDrawn = True Then
			DrawImage char\Img, char\PosX, char\PosY
		EndIf
	Next char
DrawToWorld OFF, OFF, OFF

User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset (I/2012)

Post by axu » Tue Jan 22, 2013 2:51 pm

Paroni wrote:Mulla on tyyppi CHARACTER johon joka ikinen hahmo kuuluu, myös pelaajan hahmo (pelaajan hahmo tarkistetaan char\IsControlled -muuttujan avulla joten ohjattavia voi olla myös useampi kuin yksi). Koko peli on kuva-, ei objektipohjainen ja olen yrittänyt väsätä törmäyksentunnistusta perustuen boxoverlap -komentoon. Idea on että jokaisen hahmon neljällä sivulla on "laatikko" ja kun tälläinen laatikko on hahmon pohjan kohdalla niin silloin sen laatikon suuntaan ei pääse enää liikkumaan. Ongelma onkin vain siinä, että systeemi heittää mavia. Tiedän että se johtuu for loopista mutta ilman sitä koko törmäys ei kai teoriassa edes voi toimia? Mikä avuksi?
Nähtävästi ongelma siis tulee tässä kohdassa, jos ottaa kommenttimerkit For:n ja Next:n edestä pois:

Code: Select all

        'For char.CHARACTER = Each CHARACTER
        If BoxOverlap(char\Col1X, char\Col1Y, gTileSize, gTileSize, char\PosX, char\PosY, gTileSize, gTileSize)
           //PlaySound Bump
        Else
           char\MoveY - gTileSize
           char\ReachedPos = False
        EndIf
        'Next char
Tässä on nähtävissä ainakin 2 ongelmaa: käytät tuon sisemmän for-loopin muuttujana char, joka on myös ulomman loopin muuttujan nimi. Tästä virheilmoitus todennäköisesti johtuu (koska tuon sisemmän loopin jälkeen char on NULL). Vaihda siis siihen vaikkapa char2. Tietenkin kannattaa tarkistaa, ettei törmäystä suoriteta hahmon itsensä kanssa (eli char <> char2).
Toinen ongelma, joka tulee ilmi vasta ensimmäisen ratkettua, on se, että törmätessä toiseen hahmoon kuuluu "bump"-ääni, mutta hahmo liikkuu silti eteenpäin. Tämä johtuu siitä, kun törmäys on tarkistettu ja vaikka olisi törmätty niin silti jatketaan törmäysten etsimistä ja laitetaan hahmo liikkeelle jos ei kaikkiin hahmoihin törmätä. Kokeileppa toimiiko seuraavanlainen koodi (en ole varma mitenpäin nuo hahmot olet tarkoittanut):

Code: Select all

        Collided = False //Törmäystä ei tapahdu ellei toisin todisteta
        For char2.CHARACTER = Each CHARACTER
            If char <> char2
                If BoxOverlap(char2\Col1X, cha2r\Col1Y, gTileSize, gTileSize, char\PosX, char\PosY, gTileSize, gTileSize)
                    Collided = True
                    Exit //Koska törmäys tapahtui, ei ole järkeä jatkaa etsimistä
                EndIf
            EndIf
        Next char2
        If Collided
            //PlaySound Bump
        ElseIf
            char\MoveY - gTileSize
            char\ReachedPos = False
        EndIf
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image

User avatar
Paroni
Newcomer
Posts: 20
Joined: Sun Jan 16, 2011 3:39 am

Re: Tyhmät kysymykset (I/2012)

Post by Paroni » Tue Jan 22, 2013 6:51 pm

No sehän toimi pienen säädön jälkeen oikein nätisti. Kiitos paljon :)
En ole itseasiassa aikasemmin edes törmännyt tuollaiseen "if char2<>char then" -koodiin joten ihan hyvä että kysyin.

User avatar
Cooler
Newcomer
Posts: 6
Joined: Thu Jan 17, 2013 9:49 pm

Re: Tyhmät kysymykset (I/2012)

Post by Cooler » Fri Jan 25, 2013 5:27 pm

EDIT:

Rupesi toimimaan, kun poistin keskenjääneen IE8-päivityksen.

IDE sekoilee:
Attachments
cb_bug_1.PNG
cb_bug_1.PNG (28.6 KiB) Viewed 5813 times
Last edited by Cooler on Sat Jan 26, 2013 4:55 pm, edited 1 time in total.
<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...

User avatar
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 8:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2012)

Post by naputtelija » Fri Jan 25, 2013 6:44 pm

Cooler wrote:IDE sekoilee:
>>Lataa urlmonin uusin versio netistä
>>Etsi alkuperäinen urlmon.dll
>>Korvaa alkuperäinen uudella
>>Done

Tai sitten voit päivittää Windows XPn service packin/version/.NET:in. Ohjeet pitäisi löytyä netistä. Tämä on kyllä paljon työläämpää, mutta korjaa kaikki muutkin dll-viat.
<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...

User avatar
Paroni
Newcomer
Posts: 20
Joined: Sun Jan 16, 2011 3:39 am

Re: Tyhmät kysymykset (I/2012)

Post by Paroni » Sun Feb 03, 2013 1:31 pm

Miksiköhän seuraava koodi ei toimi?

Code: Select all

If pwn\IsDrawn = True Then
    If pwn\UpdatePawn = True Then
        AssemblePawn(pwn\ID)
    EndIf
    DrawImage pwn\Img, pwn\PosX, pwn\PosY-(ImageHeight(pwn\Img)-TileSize), pwn\Facing-1 //Kun tästä poistaa pwn\Facing-1 niin kuva piirtyy, mutta vain ensimmäinen frame, muuten vain tyhjää
EndIf
...
Function AssemblePawn(id)
For pwn.PAWN = Each PAWN
For char.CHARACTER = Each CHARACTER
If char\ID = pwn\Owner Then
    If pwn\IsAssembled = True Then
        DeleteImage pwn\Img
        pwn\IsAssembled = False
    ElseIf pwn\IsAssembled = False
        pwn\Img = MakeImage(TileSize*4, TileSize*2, 4)
        DrawToImage pwn\Img
            For f = 0 To 3
                DrawImage char\Body, TileSize*f, 0, f
            Next f
        DrawToScreen
        pwn\IsAssembled = True
        pwn\UpdatePawn = False
        Exit
    EndIf
EndIf
Next char
Next pwn
EndFunction

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: Tyhmät kysymykset (I/2012)

Post by Jani » Sun Feb 03, 2013 2:57 pm

Paroni wrote:Miksiköhän seuraava koodi ei toimi?

Code: Select all

If pwn\IsDrawn = True Then
    If pwn\UpdatePawn = True Then
        AssemblePawn(pwn\ID)
    EndIf
    DrawImage pwn\Img, pwn\PosX, pwn\PosY-(ImageHeight(pwn\Img)-TileSize), pwn\Facing-1 //Kun tästä poistaa pwn\Facing-1 niin kuva piirtyy, mutta vain ensimmäinen frame, muuten vain tyhjää
EndIf
...
Function AssemblePawn(id)
For pwn.PAWN = Each PAWN
For char.CHARACTER = Each CHARACTER
If char\ID = pwn\Owner Then
    If pwn\IsAssembled = True Then
        DeleteImage pwn\Img
        pwn\IsAssembled = False
    ElseIf pwn\IsAssembled = False
        pwn\Img = MakeImage(TileSize*4, TileSize*2, 4)
        DrawToImage pwn\Img
            For f = 0 To 3
                DrawImage char\Body, TileSize*f, 0, f
            Next f
        DrawToScreen
        pwn\IsAssembled = True
        pwn\UpdatePawn = False
        Exit
    EndIf
EndIf
Next char
Next pwn
EndFunction
Onhan Pwn\Facing suurempi kuin nolla?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

Locked