Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset

Post by valscion »

Jonhu wrote:Toimiiko tämä teillä, vai kaatuko tämä latauksen jälkeen??

Itsellä toimii moitteettomasti. Vaikea korjata näitä itsellä toimivia ohjelmia :?
EDIT: Jos pistätte kuvien määräksi 0, niin varmasti toimii kaikilla. Mistä johtuu, että tuo ohjelma toimii osalla ja osalla taas ei??
Teet taulukon, jossa on kaksi ulottuvuutta. Ensimmäisessä ulottuvuudessa on 255 lokeroa ja toisessa on 2 lokeroa, mutta kun kirjoitat taulukkoon, käytät toisessa ulottuvuudessa kolmatta, ei määriteltyä lokeroa. Alla virheelliset koodipätkät:

Code: Select all

Dim pixeli(255,2) ' väreille taulukko

For i = 0 To 255
    pixeli(i,2) = Func( Int( 72 - 71 * Cos( i * PI / 128 + luku / 81)) ) // sinisen värin määrä
    // pixeli(i,2)?!?! Ei ole määritelty tuota 2-lokeroa... Muista että viimeinen paikka on KOKO-1
Next i

For i=0 To Kuvia
                Color pixeli(vari,0),pixeli(vari,1),pixeli(vari,2) // värin asetus <-------
Next i
Eli korjaukseen riittää se, että asetat pixeli() taulukon näin:

Code: Select all

Dim pixeli(255,3)
Kaikista rasittavimmat virheet ovat juuri tällaisia ;)
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
Character
Active Member
Posts: 113
Joined: Thu Nov 27, 2008 2:16 pm

Re: Tyhmät kysymykset

Post by Character »

Miksei toimi kunnolla? Itse en löytänyt koodista virheitä. :?

Code: Select all

Const PAINOVOIMA = 0.05

kimmoisuus# = 2
pudotus# = 0

radius# = 20

x# = 10
y# = 10

maay = ScreenHeight() - ScreenHeight() / 3

Repeat

    ClsColor 0, 0, 189

    Color cbBlackSkin
    Box 0, maay, ScreenWidth(), ScreenHeight() / 3

    Color cbred
    Circle x, y, radius
    
    pudotus = pudotus - PAINOVOIMA
    y = y - pudotus
    
    If y > maay - radius Then
        If kimmoisuus > 0 Then
            pudotus = kimmoisuus          
            kimmoisuus = kimmoisuus - PAINOVOIMA
        Else
            y = maay - radius
            pudotus = 0
        EndIf
    EndIf
    
    DrawScreen
    
Forever
EDIT:

Kiitos! :mrgreen:

Last edited by Character on Thu Feb 05, 2009 5:05 pm, edited 1 time in total.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post by koodaaja »

Character wrote:Miksei toimi kunnolla? Itse en löytänyt koodista virheitä. :?

Code: Select all

Const PAINOVOIMA = 0.05

kimmoisuus# = 2
pudotus# = 0

radius# = 20

x# = 10
y# = 10

maay = ScreenHeight() - ScreenHeight() / 3

Repeat

    ClsColor 0, 0, 189

    Color cbBlackSkin
    Box 0, maay, ScreenWidth(), ScreenHeight() / 3

    Color cbred
    Circle x, y, radius
    
    pudotus = pudotus - PAINOVOIMA
    y = y - pudotus
    
    If y > maay - radius Then
        If kimmoisuus > 0 Then
            pudotus = kimmoisuus          
            kimmoisuus = kimmoisuus - PAINOVOIMA
        Else
            y = maay - radius
            pudotus = 0
        EndIf
    EndIf
    
    DrawScreen
    
Forever
Hyvin se toimii, joskin hieman hassusti. Ei nimittäin noudata juurikaan oikean elämän fysiikan lakeja (ei toki mikään simulaatio noudata, mutta myötäilee ainakin.)

En oikein tajua, mitä osalla muuttujista haetaan. Pudotus vaikuttaisi hakevan putoamisnopeutta ja kimmoisuus on hieman mielenkiintoinen. Itse olen tottunut kirjoittamaan tällaiset fysiikat vaikkapa seuraavasti. Ideana on siis, että y-suuntainen kiihtyvyys alias putoamisnopeus on yhdessä muuttujassa, ja esineen törmätessä tämä nopeus käännetään ja kerrotaan kimpoamiskertoimella (luku välillä 0.0 <= x <= 1.0) joka kertoo kuinka paljon liike-energiaa säilyy. Esimerkiksi näin.

Code: Select all

Const PAINOVOIMA# = 0.05

kimmoisuus# = 0.7
putoamisnopeus# = 0

radius# = 20

x# = 100
y# = 10

maay = ScreenHeight() - ScreenHeight() / 3

Repeat

    ClsColor 0, 0, 189

    Color cbBlackSkin
    Box 0, maay, ScreenWidth(), ScreenHeight() / 3
    
    putoamisnopeus = putoamisnopeus + ( UpKey()-DownKey() )*.25
    
    Color cbred
    Circle x, y, radius
    
    putoamisnopeus = putoamisnopeus - PAINOVOIMA
    y = y - putoamisnopeus
    
    
    If y > maay - radius Then
        putoamisnopeus = -putoamisnopeus*kimmoisuus
        y = maay - radius
    EndIf
    
    DrawScreen
    
Forever
Voin myös sen verran sanoa, etten ole ainoa joka tekee näin. Se toimii ja on varsin hyvä approksimaatio.

EDIT. jo 1000 postia spämmiä o/
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Tyhmät kysymykset

Post by Ruuttu »

Minun on pakko kysyä tätä vielä kerran, kun en koskaan saa tätä toimimaan...
Jos olen skannannut tilekartan data -kerroksen ja saanut selville että pelihahmon tulisi olla tilessä 20 ja 6, niin millä laskukaavalla voin muuttaa tilet maailmankoordinaateiksi niin että pelihahmo menee prikulleen keskelle tileä eikä esimerkiksi kahden tilen väliin? Laskukaavoissani ilmenee aina jompikumpi seuraavista ongelmista:

- Positiivisiin kordinaatteihin asetettavat objektit menevät kohdilleen, mutta kun akselissa kuljetaan negatiiviselle puolelle, objekti menee tilen verran väärään kohtaan.

- Objektit asettuvat siististi tilen kohdalle, mutta jos kartassa on pariton määrä tilejä vaaka- tai pystysuunnassa, objekti menee puolen tilen verran ohi.

Code: Select all

PositionObject Player, TileX*32-(ObjectSizeX(map)/2.0),-TileY*32+(ObjectSizeY(map)/2.0)
Tällaista on testattu.
E.T.
Newcomer
Posts: 42
Joined: Thu Jul 03, 2008 9:33 am

Re: Tyhmät kysymykset

Post by E.T. »

Itse käytän tällaista systeemiä. Ei varmastikaan ole paras, mutta melko yksinkertainen.

Code: Select all

positionobject map,objectsizex(map)/2,-objectsizey(map)/2
positionobject obj,32*(tileX+0.5),-32*(tileY+0.5)
Quidquid latine dictum sit, altum videtur.
Voitot: Viikkokisa XVII
Emphii
Newcomer
Posts: 3
Joined: Sat Jan 03, 2009 7:27 pm
Location: Kyrsklätt, eli Kirkkis

$nnnDIR

Post by Emphii »

Kun projektissa on >pakko< - Ihan pakko - olla tietty fontti, joka ei tietenkään kuulu windowsin
omiin fontteihin, niin saako tuon $FONTDIR:n tai vain $WINDIR:n toimimaan jotenkin CB:ssä?
Lähinnä ajatuksena on pakottaa käyttäjä vapaaehtoisesti asentamaan se tietty fontti tai
hässäkkä ei käynnisty.

Se jossain täällä tarjolla oleva näppärä fontin konvertointi pätkä ei nyt vain valitettavasti
toimi, koska värejä käytetään ahkerasti läpi koko ohjelman. :geek:
--
/tmp.
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Tyhmät kysymykset

Post by Ruuttu »

E.T. wrote:Itse käytän tällaista systeemiä. Ei varmastikaan ole paras, mutta melko yksinkertainen.

Code: Select all

positionobject map,objectsizex(map)/2,-objectsizey(map)/2
positionobject obj,32*(tileX+0.5),-32*(tileY+0.5)
Kiitos, mutta ikävä kyllä tämä kärsii aivan samoista ongelmista kuin oma systeeminikin. :)
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

mistä johtuu että musiikki ei kuulu kunnolla? vaan kuuluu piiiiiiiippiiip ja taustalla musiikki :?:
Auttakaa

Code: Select all

valikko:

ClearText
ClearKeys
ClearMouse 
ClearObjects 

//ladataan taustakuva
taustakuva1 = loadimage ("päävaliko.jpg")
peliin = LoadObject ("peliin.png")
ohjeet = LoadObject ("ohjeet.png")
poistu = LoadObject ("poistu.png")

musiikki1=PlaySound("C:\earth at danger 1\musiikki2.mp3")
klikkaus = LoadSound("sword.mp3")
hiiri = LoadObject ("tähtäin.png")


PositionObject peliin , -350,400
PositionObject ohjeet , -250,400
PositionObject poistu , -150,400


Repeat


If SoundPlaying(musiikki1)=0 Then  
 Wait 5000
 musiikki1 = PlaySound ("C:\earth at danger 1\musiikki2.mp3")
EndIf 

DrawImage taustakuva1,0,0
  
PositionObject hiiri,MouseWX(),MouseWY()
ShowMouse OFF
  
If ObjectsOverlap(hiiri,peliin) And MouseHit(1) Then PlaySound klikkaus Then Goto valitse
If ObjectsOverlap (hiiri,ohjeet) And MouseHit(1) Then playsound klikkaus then Goto ohjeet
If ObjectsOverlap (hiiri,poistu) And MouseHit(1) Then PlaySound klikkaus Then End
      
DrawGame

DrawScreen
Forever
Requiem for Anthrax
Active Member
Posts: 155
Joined: Wed Dec 03, 2008 8:17 pm
Location: Haukipudas

Re: Tyhmät kysymykset

Post by Requiem for Anthrax »

Minulla tuo toisto toimi, joten ongelma on koneessasi tai sitten tiedosto on korruptoitunut tai sitten se on vain huonolaatuinen.
Turmankylä
huonoja pelejä, purkkaisia viritelmiä, tylsiä tarinoita.
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

sain toimimaan mutta aika outoa..

muokkasin ohjelmalla wav -> mp3 = piippiip ongelma
wav -> ogg = toimii niin kuin normaalisti

mutta kumpi on parempi ogg vai mp3?
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

rami123 wrote:sain toimimaan mutta aika outoa..

muokkasin ohjelmalla wav -> mp3 = piippiip ongelma
wav -> ogg = toimii niin kuin normaalisti

mutta kumpi on parempi ogg vai mp3?
Luulen että ogg.
Aivan väärässä?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

en keksi ratkaisua tälle ongelmalle

Code: Select all

If pistooli=1 And MouseHit (1) And reload=0 And ammukset>0 Then 'pitää olla ammuksia ampuakseen
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(pati)
        newbullet\dmg=voima
        newbullet\speed=speedupg
        ammukset - 1
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newbullet\obj,pelaaja
        MoveObject newBullet\obj,24
        PlaySound pistooli,50
        reload=15
    EndIf

    If konepistooli=1 Then
      if MouseDown (1) And reload=0 And ammukset>0 Then         'pitää olla ammuksia ampuakseen
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(pati)
        newbullet\dmg=voima
        newbullet\speed=speedupg
        ammukset - 1
        PlaySound konepistooli,250 
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newbullet\obj,pelaaja
        MoveObject newBullet\obj,24

        reload=8
    EndIf
    EndIf 
kummassakaan aseessa ei toimi äänet ?
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 »

Ogg on ilmainen (tai pikemminkin avoin eli lisenssivapaa) muoto. Mp3 taas on lisenssoitu eli alat tekemään kaupallista peliä, käytä mielummin ogg-muotoa välttääksesi turhat häslingit. CB:llä tosin et saa tehdä kaupallista peliä oli sitten ogg tai mp3 kun FMOD on piireissä mukana. Mutta jos verrataan häviöttömyyttä & häviöllisyyttä niin kumpikin muodoista on häviöllisiä. Se riippuu kanssa ihan pakkauksen määrästä paljonko laatu huononee.
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

mistä nyt tämäkin johtunee?


musiikki ei soi ja peli on todella hidas?

Code: Select all

valikko:

ClearText
ClearKeys
ClearMouse 
ClearObjects 

//ladataan taustakuva
taustakuva1 = LoadImage ("päävaliko.jpg")
peliin = LoadObject ("peliin.png")
ohjeet = LoadObject ("ohjeet.png")
poistu = LoadObject ("poistu.png")

musiikki1=PlaySound("pelimusiikki2.ogg")
klikkaus = LoadSound("C:\earth at danger 1\sword.ogg")
hiiri = LoadObject ("tähtäin.png")


PositionObject peliin , -350,400
PositionObject ohjeet , -250,400
PositionObject poistu , -150,400


Repeat


If SoundPlaying(musiikki1)=0 Then  
 Wait 5000
 musiikki1 = PlaySound ("pelimusiikki2.ogg")
EndIf 

DrawImage taustakuva1,0,0
  
PositionObject hiiri,MouseWX(),MouseWY()
ShowMouse OFF
  
If ObjectsOverlap(hiiri,peliin) And MouseHit(1) Then PlaySound klikkaus Then Goto valitse
If ObjectsOverlap (hiiri,ohjeet) And MouseHit(1) Then playsound klikkaus then Goto ohjeet
If ObjectsOverlap (hiiri,poistu) And MouseHit(1) Then PlaySound klikkaus Then End
      
DrawGame

DrawScreen
Forever

Code: Select all

valikko:

ClearText
ClearKeys
ClearMouse 
ClearObjects 

//ladataan taustakuva
taustakuva1 = LoadImage ("päävaliko.jpg")
peliin = LoadObject ("peliin.png")
ohjeet = LoadObject ("ohjeet.png")
poistu = LoadObject ("poistu.png")

musiikki1=PlaySound("C:\earth at danger 1\pelimusiikki2.ogg")
klikkaus = LoadSound("C:\earth at danger 1\sword.ogg")
hiiri = LoadObject ("tähtäin.png")


PositionObject peliin , -350,400
PositionObject ohjeet , -250,400
PositionObject poistu , -150,400


Repeat


If SoundPlaying(musiikki1)=0 Then  
 Wait 5000
 musiikki1 = PlaySound ("C:\earth at danger 1\pelimusiikki2.ogg")
EndIf 

DrawImage taustakuva1,0,0
  
PositionObject hiiri,MouseWX(),MouseWY()
ShowMouse OFF
  
If ObjectsOverlap(hiiri,peliin) And MouseHit(1) Then PlaySound klikkaus Then Goto valitse
If ObjectsOverlap (hiiri,ohjeet) And MouseHit(1) Then playsound klikkaus then Goto ohjeet
If ObjectsOverlap (hiiri,poistu) And MouseHit(1) Then PlaySound klikkaus Then End
      
DrawGame

DrawScreen
Forever
mutta tämä toimii? koodi ja kuvat,äänet ovat kaikki samassa kansiossa

EDIT:

Äänissä on ne ongelmat?

Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

rami123 wrote:en keksi ratkaisua tälle ongelmalle

Code: Select all

If pistooli=1 And MouseHit (1) And reload=0 And ammukset>0 Then 'pitää olla ammuksia ampuakseen
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(pati)
        newbullet\dmg=voima
        newbullet\speed=speedupg
        ammukset - 1
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newbullet\obj,pelaaja
        MoveObject newBullet\obj,24
        PlaySound pistooli,50
        reload=15
    EndIf

    If konepistooli=1 Then
      if MouseDown (1) And reload=0 And ammukset>0 Then         'pitää olla ammuksia ampuakseen
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(pati)
        newbullet\dmg=voima
        newbullet\speed=speedupg
        ammukset - 1
        PlaySound konepistooli,250 
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newbullet\obj,pelaaja
        MoveObject newBullet\obj,24

        reload=8
    EndIf
    EndIf 
kummassakaan aseessa ei toimi äänet ?
No ei tietenkään. Esimerkiksi konepistoolissa yrität soittaa numeroa 1 :?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

Jani wrote:
rami123 wrote:en keksi ratkaisua tälle ongelmalle

Code: Select all

If pistooli=1 And MouseHit (1) And reload=0 And ammukset>0 Then 'pitää olla ammuksia ampuakseen
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(pati)
        newbullet\dmg=voima
        newbullet\speed=speedupg
        ammukset - 1
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newbullet\obj,pelaaja
        MoveObject newBullet\obj,24
        PlaySound pistooli,50
        reload=15
    EndIf

    If konepistooli=1 Then
      if MouseDown (1) And reload=0 And ammukset>0 Then         'pitää olla ammuksia ampuakseen
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(pati)
        newbullet\dmg=voima
        newbullet\speed=speedupg
        ammukset - 1
        PlaySound konepistooli,250 
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newbullet\obj,pelaaja
        MoveObject newBullet\obj,24

        reload=8
    EndIf
    EndIf 
kummassakaan aseessa ei toimi äänet ?
No ei tietenkään. Esimerkiksi konepistoolissa yrität soittaa numeroa 1 :?
miten se sitten korjataan?
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

rami123 wrote:
Jani wrote:
rami123 wrote:en keksi ratkaisua tälle ongelmalle

Code: Select all

If pistooli=1 And MouseHit (1) And reload=0 And ammukset>0 Then 'pitää olla ammuksia ampuakseen
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(pati)
        newbullet\dmg=voima
        newbullet\speed=speedupg
        ammukset - 1
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newbullet\obj,pelaaja
        MoveObject newBullet\obj,24
        PlaySound pistooli,50
        reload=15
    EndIf

    If konepistooli=1 Then
      if MouseDown (1) And reload=0 And ammukset>0 Then         'pitää olla ammuksia ampuakseen
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(pati)
        newbullet\dmg=voima
        newbullet\speed=speedupg
        ammukset - 1
        PlaySound konepistooli,250 
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newbullet\obj,pelaaja
        MoveObject newBullet\obj,24

        reload=8
    EndIf
    EndIf 
kummassakaan aseessa ei toimi äänet ?
No ei tietenkään. Esimerkiksi konepistoolissa yrität soittaa numeroa 1 :?
miten se sitten korjataan?
Aluksi lataat äänet esim. muuttujiin pistoolisound ja konekiväärisound.
Sitten konepistoolilla: PlaySound konepistoolisound.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Tuxu
Member
Posts: 81
Joined: Tue Oct 14, 2008 5:54 pm
Location: Jyväskylä
Contact:

Re: Tyhmät kysymykset

Post by Tuxu »

rami123 wrote: musiikki ei soi ja peli on todella hidas?
Tuo pelin hitaus johtunee siitä että käytät Wait-komentoa tässä kohtaa:

Code: Select all

If SoundPlaying(musiikki1)=0 Then 
Wait 5000
musiikki1 = PlaySound ("pelimusiikki2.ogg")
EndIf
Koko peli pysähtyy viideksi sekunniksi eikä reagoi näppäin syötteisiin tms, kun musa loppuu. Käytä mielummin Timer-komentoa.

Siitä en sitten tiedä miksi musa ei soi. Minulla wörkki hyvin...
aivot pohtii ja raksuttaa
TuxuGames | Projektiblogi
Character
Active Member
Posts: 113
Joined: Thu Nov 27, 2008 2:16 pm

Re: Tyhmät kysymykset

Post by Character »

Miten saan tehtyä kuville liukuvan törmäyksen? :?
Tuxu
Member
Posts: 81
Joined: Tue Oct 14, 2008 5:54 pm
Location: Jyväskylä
Contact:

Re: Tyhmät kysymykset

Post by Tuxu »

Character wrote:Miten saan tehtyä kuville liukuvan törmäyksen? :?
Tässä tulee väsyneenä värkätty koodi, toivottavasti auttaa. Kyseessä siis laatikkotörmäystunnistus. Jos haluaa pikselitarkan törmäyksen käytä "Imagesoverlapin()" sijalla funktiota "ImagesCollide()".

Code: Select all

FrameLimit 40
ClsColor cbwhite

'Luodaan kuvat
'Voit korvata loadimagella
'esim l1=loadimage("lehmä.jpg") tms
'mutta teen nyt cb:n valmiilla piirtokomennoilla
l1=MakeImage(50,50)
l2= MakeImage(50,50)
DrawToImage l1
Color cbblue
Box 0,0,50,50,1
DrawToImage l2
Color cbred
Box 0,0,50,50,1
DrawToScreen
'-----------

'muuttujat :
l1x = 10'kuvan l1 koordinaatit
l1y = 10
l2x = 100'ja sama kuvalle 2
l2y = 100

Repeat 'Looppi 

    'Laitetaan laatikon vanhat koordinaatit muistiin törmäystä varten:
    l1xvanha=l1x
    l1yvanha=l1y
    
    'ohjaa nuolilla
    If LeftKey() Then l1x-3
    If RightKey() Then l1x+3
    If UpKey() Then l1y-3
    If DownKey() Then l1y+3
    
    
    'Törmäys, ohjauksen jälkeen pitää olla:
    If ImagesOverlap(l1,l1x,l1y,l2,l2x,l2y) Then 
        l1x=l1xvanha'jos törmää boxiin, niin laitetaan 
        l1y=l1yvanha'vanhat koodinaatit
        
        //////LIUKUTÖRMÄYS:////////////////////////////////////////////////
        'tulikohan purkalla?
        'ei voi edes toteuttaa else/if-rakenteella, koska silloin ei toimi
        If UpKey() Then 
            l1y-3
            If ImagesOverlap(l1,l1x,l1y,l2,l2x,l2y) Then l1y=l1yvanha 
        EndIf
        If DownKey() Then 
            l1y+3
            If ImagesOverlap(l1,l1x,l1y,l2,l2x,l2y) Then l1y=l1yvanha 
        EndIf
        If RightKey() Then 
            l1x+3   
            If ImagesOverlap(l1,l1x,l1y,l2,l2x,l2y) Then l1x=l1xvanha 
        EndIf
        If LeftKey() Then 
            l1x-3
            If ImagesOverlap(l1,l1x,l1y,l2,l2x,l2y) Then l1x=l1xvanha 
        EndIf
        '///////////////////////////////////////////////////////////
        
    EndIf
    
    //Piirretään kuvat:
    DrawImage l1,l1x,l1y
    DrawImage l2,l2x,l2y
    
    DrawScreen
Forever
Edit: no laitanpa vielä laiskoille koodin imagescollidella. Törmäystunnistus on siis nyt pikselin tarkka ja sitä voi siis hyvin käyttää vaikka karttakuvissa yms. Hidashan se on...

Code: Select all

FrameLimit 40
ClsColor cbwhite

'Luodaan kuvat
'Voit korvata loadimagella
'esim l1=loadimage("lehmä.jpg") tms
'mutta teen nyt cb:n valmiilla piirtokomennoilla
l1=MakeImage(50,50)
l2= MakeImage(50,50)
DrawToImage l1
Color cbblue
Box 0,0,50,50,1
DrawToImage l2
Color cbred
Box 0,0,50,50,1
DrawToScreen
'-----------

'muuttujat :
l1x = 10'kuvan l1 koordinaatit
l1y = 10
l2x = 100'ja sama kuvalle 2
l2y = 100

Repeat 'Looppi

    'Laitetaan laatikon vanhat koordinaatit muistiin törmäystä varten:
    l1xvanha=l1x
    l1yvanha=l1y
   
    'ohjaa nuolilla
    If LeftKey() Then l1x-3
    If RightKey() Then l1x+3
    If UpKey() Then l1y-3
    If DownKey() Then l1y+3
   
   
    'Törmäys, ohjauksen jälkeen pitää olla:
    If ImagesCollide(l1,l1x,l1y,0,l2,l2x,l2y,0) Then 'Tänne Imagescollide- jos haluaa pikselitörmäyksen
        l1x=l1xvanha'jos törmää boxiin, niin laitetaan
        l1y=l1yvanha'vanhat koodinaatit
       
        //////LIUKUTÖRMÄYS:////////////////////////////////////////////////
        'tulikohan purkalla?
        'ei voi edes toteuttaa else/if-rakenteella, koska silloin ei toimi
        If UpKey() Then
            l1y-3
            If ImagesCollide(l1,l1x,l1y,0,l2,l2x,l2y,0) Then l1y=l1yvanha 'Tänne Imagescollide- jos haluaa pikselitörmäyksen
        EndIf
        If DownKey() Then
            l1y+3
            If ImagesCollide(l1,l1x,l1y,0,l2,l2x,l2y,0) Then l1y=l1yvanha 'Tänne Imagescollide- jos haluaa pikselitörmäyksen
        EndIf
        If RightKey() Then
            l1x+3   
            If Imagescollide(l1,l1x,l1y,0,l2,l2x,l2y,0) Then l1x=l1xvanha 'Tänne Imagescollide- jos haluaa pikselitörmäyksen
        EndIf
        If LeftKey() Then
            l1x-3
            If ImagesCollide(l1,l1x,l1y,0,l2,l2x,l2y,0) Then l1x=l1xvanha 'Tänne Imagescollide- jos haluaa pikselitörmäyksen
        EndIf
        '///////////////////////////////////////////////////////////
       
    EndIf
   
    //Piirretään kuvat:
    DrawImage l1,l1x,l1y
    DrawImage l2,l2x,l2y
   
    DrawScreen
Forever
aivot pohtii ja raksuttaa
TuxuGames | Projektiblogi
Locked