Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
DisturbedTK
Newcomer
Posts: 9
Joined: Tue Dec 29, 2009 7:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK »

Tässä kimmoisuudella leikkisin mutta en saa palloa pysähtymään

koodi:

Code: Select all

'! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
'Aja tämä ohjelma painamalla F5.
'Lopeta ohjelma painamalla ESC.

'OHJAUS:
' - nuolilla liikkuu
' - Z = hyppy

'! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

Const PAINOVOIMA = -0.5 

yPlus#=0


'Asetetaan ruutu hieman zoomattuun tilaan
SCREEN 320,240,0,cbsizable 


FrameLimit 40 'rajoita nopeutta
'-------------------------------------------------
'lataa kartta, siirrä sitä ylöspäin ja animoi se.
kenttä=LoadMap("Media\testmap.til","Media\tileset.bmp")
PositionObject kenttä,0,50
PlayObject kenttä,0,0,0.5


ball = LoadObject("Media\ball.bmp", 360)
MaskObject ball,255,0,255


SetupCollision ball,kenttä,1,4,2
'-------------------------------------------------
'Pääsilmukka
Repeat
Print yPlus#

    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        vauhti=6 'vauhtia oikealle
    ElseIf LeftKey() Then
        vauhti=-6 'vauhtia vasemmalle
    EndIf
    
    'liikuta pelihahmoa
    TranslateObject ball,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA 'päivitä painovoima    
      
    
    UpdateGame 'päivitä törmäys
    CloneCameraPosition ball 'liimaa kamera
    
    maassa=0 'ilmassa jollei toisin käy ilmi
    törmäykset=CountCollisions(ball)
    'katsotaan tärmätäänkö kattoon tai lattiaan
    For i=1 To törmäykset
        If GetCollision(ball,i)=kenttä
            'lattia
            If CollisionAngle(ball,i)=90 Then 
                yPlus#=yPlus#*-0.6
                maassa=1 'jalat on maassa
            EndIf
            'katto
            If CollisionAngle(ball,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
    
    'HYPPY (vain jos jalat maassa)
    If KeyDown(cbKeyZ) And maassa Then 
        yPlus#=10 'voimaa ylös päin
    EndIf


    DrawScreen 'piirrä näyttö

Until EscapeKey()
Mikä avuksi?
ezbe
Tech Developer
Tech Developer
Posts: 93
Joined: Fri May 08, 2009 6:53 pm

Re: Tyhmät kysymykset (I/2010)

Post by ezbe »

Painovoiman lisääminen yPlussaan aiheuttanee sen, että yPlussan arvo pysyy "liian" korkeana, ja tuo törmäys tapahtuu koko ajan uudestaan.

Code: Select all

                If CollisionAngle(ball,i)=90 Then
                    yPlus#=yPlus#*-0.6
                    maassa=1 'jalat on maassa
                    If(yPlus# < 1.5) Then yPlus = -0.01   'Tämän lisäsin
                EndIf
Tuo siis asettaa yPlussan -0.01:een, mikäli törmäys on tapahtunut, ja arvo on riittävän pieni. Suurempi arvo if-lauseessa aiheuttaa maasta kimpoamisen loppumisen nopeammin. Arvo asetetaan -0.01:een, jotta törmäys maan kanssa tapahtuu uudestaan seuraavalla päivityskierroksella, kun TranslateObject koittaa siirtää palloa maan sisään.
???

Re: Tyhmät kysymykset (I/2010)

Post by ??? »

Tarvitsen funktion, joka kertoisi mikä kohta (X,Y) maailmakordinaateissa on sadan päässä(saisi valita kulman) haluamasta kohdasta.
Selkeennys: Funktio(kohdex,kohdey,etäisyys,kulma)
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Tyhmät kysymykset (I/2010)

Post by MaGetzUb »

??? wrote:Tarvitsen funktion, joka kertoisi mikä kohta (X,Y) maailmakordinaateissa on sadan päässä(saisi valita kulman) haluamasta kohdasta.
Selkeennys: Funktio(kohdex,kohdey,etäisyys,kulma)
Siis miten/millä lailla tietää, mikä kohta, tarkoitatko tilemapista paikan etsimistä/hakemista?
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
vast

Re: Tyhmät kysymykset (I/2010)

Post by vast »

??? wrote:Tarvitsen funktion, joka kertoisi mikä kohta (X,Y) maailmakordinaateissa on sadan päässä(saisi valita kulman) haluamasta kohdasta.
Selkeennys: Funktio(kohdex,kohdey,etäisyys,kulma)
Tätäkö tarkoitit?
Koodissa voi olla virheitä, ku kirjotti notepadil nopeesti :S

Code: Select all

print "100 yksikön päässä ja 90 asteen kulmassa pisteestä (10,10) on piste: "
print "( "+fgetx(10, 100, 90 ) + ", " + fgety(10, 100,90 )
waitkey

function fgetx(px, distance#, angle# )
	return px + cos(angle#)*distance#
endfunction

function fgety(py, distance#, angle# )
	return py + sin(angle#)*distance#
endfunction
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by otto90x »

??? wrote:Tarvitsen funktion, joka kertoisi mikä kohta (X,Y) maailmakordinaateissa on sadan päässä(saisi valita kulman) haluamasta kohdasta.
Selkeennys: Funktio(kohdex,kohdey,etäisyys,kulma)
Noin yksinkertaiseen juttuun en kyllä suosittele funktiota käyttämään. Ja koska funktio voi palauttaa vain yhden arvon, on helpompaa tehdä x ja y arvojen palauttamiseen omat funktiot. Yksinkertaisuudessaan haluamasi piste on (x+cos(kulma)*etäisyys,y+sin(kulma)*etäisyys) siis maailmakoordinaatteja käyttäessä, jos käytät ruutukoordinaatteja tällöin y:n arvot kasvavat alaspäin mennessä jolloin sinin edessä tulee käyttää miinusmerkkiä. Tässä vielä pieni koodi.

Code: Select all

DrawToWorld ON

etäisyys#=100.0
kulma#=Rnd(360.0)

Repeat

    etäisyys# = etäisyys# + (UpKey()-DownKey())*2.0
    
    kulma# = kulma# + (LeftKey()-RightKey())*2.0
    
    Text 0,0,"Etäisyys: "+etäisyys#+" Kulma: "+kulma#

    Line MouseWX(),MouseWY(),GetX(MouseWX(),etäisyys#,kulma#),GetY(MouseWY(),etäisyys#,kulma#)
    
    DrawScreen

Forever

//näin yksinkertaisiin on oikeasti turha käyttää funktiota
Function GetY(y#,etäisyys#,kulma#)
    Return y#+Sin(kulma#)*etäisyys#
End Function 

Function GetX(x#,etäisyys#,kulma#)
    Return x#+Cos(kulma#)*etäisyys#
End Function 
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.
User avatar
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 9:01 pm

Re: Tyhmät kysymykset (I/2010)

Post by ukkeli »

teen räiskintä peliä mutta tulee mav voitteko auttaa
ja kiitos etukäteen tässä koodi


Type AMMUS
Field obj
End Type

Type vihut
Field obj
End Type


FrameLimit 60


ukko=LoadObject("Media\soldier.bmp",370)
SetupCollision ukko,map ,1,4,2
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF

ammo=LoadSound("media\gun 7.wav")

enemy=LoadObject("Media\guy.bmp",370)

Repeat

CloneCameraPosition ukko

If LeftKey() Then TurnObject ukko, 4
If RightKey() Then TurnObject ukko, -4
If UpKey() Then MoveObject ukko, 5
If DownKey() Then MoveObject ukko, -5

If KeyDown(cbkeyspace) And reload=0 Then

PlaySound ammo

luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ukko
CloneObjectOrientation luoti\obj,ukko
reload=6
End If

If reroad>0 Then reload=reload-1

MoveObject luoti\obj,10

For luoti.AMMUS = Each AMMUS

Next luoti

If Timer() = aik=0 Then
vihu.vihut = New(vihut)
vihu\obj=CloneObject (enemy)
PositionObject vihu\obj,Rand(0,100),Rand(0,100)
End If

PointObject vihu\obj,ukko

MoveObject vihu\obj,4
For vihu.vihut = Each vihut

Next vihu


If ObjectsOverlap (vihu\obj,luoti\obj) Then
DeleteObject luoti\obj
DeleteObject vihu\obj
Delete luoti
Delete vihu
End If

DrawScreen

Forever
...
Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Tyhmät kysymykset (I/2010)

Post by Nassi_Setä »

Ensiksi kannatta kättää Code-tageja, kun laittaa koodia, ettei viesti veny puolen sivun mittaiseksi :D

Koodista paistoi heti silmään End If:t joiden pitäisi olla Endif ja rivi: If reroad>0 Then reload=reload-1.
Kannattaisi sisentää koodia jotta se olisi selkeämpää ja virheetkin löytäisi helpommin.

fästedit: Niin ja kannattaa luke Ezben mahtava tuto tyypeistä:Linkki
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

ukkeli wrote:teen räiskintä peliä mutta tulee mav voitteko auttaa
ja kiitos etukäteen tässä koodi
1. Tervetuloa foorumeille!

2. Käytähän Code-tageja.

Code: Select all

Type AMMUS
Field obj
End Type 

Type vihut 
Field obj
End Type


FrameLimit 60 


ukko=LoadObject("Media\soldier.bmp",370)
SetupCollision ukko,map ,1,4,2    
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF

ammo=LoadSound("media\gun 7.wav") 

enemy=LoadObject("Media\guy.bmp",370)

Repeat 

CloneCameraPosition ukko

If LeftKey() Then TurnObject ukko, 4
If RightKey() Then TurnObject ukko, -4
If UpKey() Then MoveObject ukko, 5
If DownKey() Then MoveObject ukko, -5

If KeyDown(cbkeyspace) And reload=0 Then 

PlaySound ammo 

luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ukko 
CloneObjectOrientation luoti\obj,ukko 
reload=6
End If

If reroad>0 Then reload=reload-1

MoveObject luoti\obj,10

For luoti.AMMUS = Each AMMUS

Next luoti

If Timer() = aik=0 Then 
vihu.vihut = New(vihut)
vihu\obj=CloneObject (enemy)
PositionObject vihu\obj,Rand(0,100),Rand(0,100)
End If 

PointObject vihu\obj,ukko

MoveObject vihu\obj,4
For vihu.vihut = Each vihut

Next vihu


If ObjectsOverlap (vihu\obj,luoti\obj) Then  
DeleteObject luoti\obj
DeleteObject vihu\obj
Delete luoti
Delete vihu
End If 

DrawScreen 

Forever
Noin, koodi vie paljon vähemmän tilaa ja on pr0silver-teemassa helppo valita kokonaan painamalla Valitse kaikki.

3. Olet selvästi yrittänyt tehdä koodin itse sen sijaan, että copypastaisit esimerkeistä. Hienoa! Pari hommaa on kuitenkin vähän hassusti:
- Jos käyttäisit sisennyksiä, ongelma olisi paljon helpompi etsiä.
- Se on EndIf, ei End If. Jossain päin manuaalia tai esimerkkejä muistaakseni lukee, että oikea muoto olisi End If, mutta tämä info on virheellistä.
- En käsitä, mitä If Timer() = aik = 0 tarkoittaa, mutta oletan sen tarkoittavan jonkinsorttista ajastinta (joka kannattaa muuten yleensä toteuttaa mielummin randomilla kuin ajastimella).
- Jos tyyppien jäseniä yritetään käyttää For-looppien ulkopuolella, ohjelma MAVittaa, koska ei tajua niiden olevan tyyppien jäseniä - ja tässäpä se varsinainen ongelma olikin.

Tosin, vaikka olenkin saanut kaikki ongelmat korjattua, kuvioihin astui Beta kympin eeppisin feature: MysteeriMAV! SetWindow "Toimii" eri kohdissa kertoi, että koodirivi, joka aikaisemmin toimi, ei toiminutkaan enää myöhemmin. Jos olisi vielä jotain hyötyä (olen tätä ongelmaa jo varmaan puoli tuntia selvitellyt, vähän ketuttaa jos siitä ei ollutkaan apua), niin tässä olisi tekemäni kaksinpelattavan räiskintäpelin sorsat:

Code: Select all

Type AMMUKSET
    Field obj
EndType

Type VIHUT
    Field obj
    Field Health
EndType

SCREEN 640, 480, 0, 0

kenttä = LoadObject ("Media\kentta.png") 'mikä tahansa 640*480 kuva käy
ukko = LoadObject ("Media\soldier.bmp", 135)
ukko2 = LoadObject ("Media\soldier.bmp", 135)
pati = LoadObject ("Media\bullet2.bmp", 135) 'mikä tahansa pieni kuva käy
ShowObject pati, OFF
vihu = LoadObject ("Media\cow.bmp", 72)
ShowObject vihu, OFF
fontti = LoadFont ("Arial", 20, ON)
SetFont fontti
isofontti = LoadFont ("arial", 60, ON)


Level = 1
healt1 = 500
healt2 = 500

Randomize Timer()

FrameLimit 50

exists1 = 1
exists2 = 1

Repeat

    If exists1 And KeyDown (cbkeyup) Then MoveObject ukko, 4
    If exists1 And KeyDown (cbkeydown) Then MoveObject ukko, -4
    If exists1 And KeyDown (cbkeyright) Then TurnObject ukko, -8
    If exists1 And KeyDown (cbkeyleft) Then TurnObject ukko, 8
    If ObjectX (ukko) > 100 Then PositionObject ukko, 100, ObjectY (ukko)
    If ObjectX (ukko) < -100 Then PositionObject ukko, -100, ObjectY (ukko)
    If ObjectY (ukko) > 100 Then PositionObject ukko, ObjectX (ukko), 100
    If ObjectY (ukko) < -100 Then PositionObject ukko, ObjectX (ukko), -100
    
    If exists2 And KeyDown (cbkeyw) Then MoveObject ukko2, 4
    If exists2 And KeyDown (cbkeys) Then MoveObject ukko2, -4
    If exists2 And KeyDown (cbkeyd) Then TurnObject ukko2, -8
    If exists2 And KeyDown (cbkeya) Then TurnObject ukko2, 8
    If ObjectX (ukko2) > 100 Then PositionObject ukko2, 100, ObjectY (ukko2)
    If ObjectX (ukko2) < -100 Then PositionObject ukko2, -100, ObjectY (ukko2)
    If ObjectY (ukko2) > 100 Then PositionObject ukko2, ObjectX (ukko2), 100
    If ObjectY (ukko2) < -100 Then PositionObject ukko2, ObjectX (ukko2), -100
   
    
    If KeyDown (53) And reload < 1 And exists1 Then    //Luodaan ammus
        uusAmmus.AMMUKSET = New (AMMUKSET)
        uusAmmus\obj = CloneObject (pati)
        CloneObjectPosition uusAmmus\obj, ukko
        CloneObjectOrientation uusAmmus\obj, ukko
        MoveObject uusAmmus\obj, 24
        Reload = 2
    EndIf
    
    If KeyDown (cbkey1) And reload2 < 1 And exists2 Then
        uusAmmus.AMMUKSET = New (AMMUKSET)
        uusAmmus\obj = CloneObject (pati)
        CloneObjectPosition uusammus\obj, ukko2
        CloneObjectOrientation uusammus\obj, ukko2
        MoveObject uusammus\obj, 24
        reload2 = 2
    EndIf

    If Rand (0,50-level) < 1 Then
        For i = 1 To RoundUp(level/1.5)        
        uusVihu.VIHUT = New (VIHUT)
        uusVihu\obj = CloneObject (vihu)
        PositionObject uusVihu\obj, Rand (-320,320), Rand (-240,240)
        PointObject uusVihu\obj, ukko
        uusVihu\Health = Rand (1,2)
        Next i
    EndIf
        

    Reload -1
    reload2 -1
    
    For iAmmus.AMMUKSET = Each AMMUKSET
        MoveObject iAmmus\obj, 10
        If Distance2 (iAmmus\obj, ukko) > 700 Then DeleteObject iAmmus\obj: Delete iAmmus
    Next iAmmus

    For iVihu.VIHUT = Each VIHUT
        If exists1 Then PointObject iVihu\obj, ukko Else PointObject iVihu\obj, ukko2
        MoveObject iVihu\obj, 1
        If ObjectsOverlap (ivihu\obj, ukko) Then healt1 -1
        If ObjectsOverlap (ivihu\obj, ukko2) Then healt2 -1
    Next iVihu
    
    For iVihu.VIHUT = Each VIHUT
        tuhoa=OFF
        For iAmmus.AMMUKSET = Each Ammukset
             If ObjectsOverlap(iVihu\obj,iAmmus\obj) Then
                 If bulletmode=0 Then 
                     DeleteObject iAmmus\obj
                     Delete iAmmus
                 EndIf     
                 tuhoa=ON
             EndIf
    Next iAmmus

    If tuhoa Then iVihu\Health -1
    If iVihu\Health < 0 Then DeleteObject iVihu\obj: Delete ivihu: Pisteet +1
    Next iVihu
    
    If pisteet > Level*3 Then Pisteet = 0: Level +1: AddText "LEVEL "+Level
    If Rand (0,80) = 0 Then ClearText
    
    If level > 11 Then
        SetFont isofontti
        AddText "********PÄÄSIT LÄPI********"
    EndIf
    
    If healt1 < 1 Then ShowObject ukko, OFF: exists1 = 0
    If healt2 < 1 Then ShowObject ukko2, OFF: exists2 = 0
    
    If healt1 < 1 And healt2 < 1 Then MakeError "KUOLITASCFAWETQFER)OTJW!"

    DrawScreen
    
Forever
Got sarnath'd by Nassi_Setä, mutta menkööt sitten vielä kuitenkin.
DatsuniG
Advanced Member
Posts: 367
Joined: Fri Aug 15, 2008 9:57 pm

Re: Tyhmät kysymykset (I/2010)

Post by DatsuniG »

Chaosworm wrote: - Se on EndIf, ei End If. Jossain päin manuaalia tai esimerkkejä muistaakseni lukee, että oikea muoto olisi End If, mutta tämä info on virheellistä.
Ei pidä paikkaansa. Jotkut pitävät End If:iä selkeämpänä kuin EndIf:iä, ihan tottumiskysymys.

Code: Select all

If 1 = 1 Then 
    test1()
End If
If 2 = 2 Then 
    test2()
EndIf 
WaitKey 

Function Test1()
    Print "Tämähän toimii!"
EndFunction 

Function Test2()
    Print "Tämähän toimii myös!"
End Function 
Chaosworm wrote: - En käsitä, mitä If Timer() = aik = 0 tarkoittaa, mutta oletan sen tarkoittavan jonkinsorttista ajastinta (joka kannattaa muuten yleensä toteuttaa mielummin randomilla kuin ajastimella).
Suosittelisin molempien yhdistämistä tai sitten vain ajastinta.

Code: Select all

SetWindow "Alempi rivi päivittyy satunnaisesti!"
Repeat
    If Timer() - timr > number * 1000 Then 
        number = Rand(1,9)
        timr = Timer()
        ClearText
        AddText "Update Time: " + number + "s"
    EndIf 
    DrawScreen
Forever 
    
Korjailin "vähän" koodia. Muutaman rivin paikkaa piti vaihtaa, ja alkuun piti lisätä kartan lataus.

Code: Select all

Type AMMUS
Field obj
End Type

Type vihut
Field obj
End Type


FrameLimit 60

map= LoadMap("Media\cdm2.til","Media\tileset.bmp")
ukko=LoadObject("Media\soldier.bmp",90)
SetupCollision ukko,map ,1,4,2
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF

ammo=LoadSound("media\gun 7.wav")

enemy=LoadObject("Media\guy.bmp",90)

Repeat

CloneCameraPosition ukko

If LeftKey() Then TurnObject ukko, 4
If RightKey() Then TurnObject ukko, -4
If UpKey() Then MoveObject ukko, 5
If DownKey() Then MoveObject ukko, -5

If KeyDown(cbkeyspace) And reload=0 Then
    PlaySound ammo
    luoti.AMMUS = New(AMMUS)
    luoti\obj=CloneObject(pati)
    CloneObjectPosition luoti\obj,ukko
    CloneObjectOrientation luoti\obj,ukko
    reload=6
End If

If reload>0 Then reload=reload-1

For luoti.AMMUS = Each AMMUS
    MoveObject luoti\obj,10
    For vihu.vihut = Each vihut
        If ObjectsOverlap (vihu\obj,luoti\obj) Then
            DeleteObject luoti\obj
            DeleteObject vihu\obj
            Delete luoti
            Delete vihu
        End If
    Next vihu
Next luoti

For vihu.vihut = Each vihut
    MoveObject vihu\obj,4
    PointObject vihu\obj,ukko
Next vihu

If Timer() - aika > 5000 Then
    aika = Timer()
    vihu.vihut = New(vihut)
    vihu\obj=CloneObject (enemy)
    PositionObject vihu\obj,Rand(0,100),Rand(0,100)
End If

DrawScreen

Forever
Last edited by DatsuniG on Fri Jan 29, 2010 10:58 pm, edited 2 times in total.
Hengität nyt manuaalisesti.
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Tyhmät kysymykset (I/2010)

Post by MrMonday »

Ehkä menee hieman offtopiciksi, mutta katsoin, että periaatteessahan nuo ukot voisivat kääntyä 370 eri suuntaan :)
mutta eipähän se haittaa vaikka vaikka ois 10 000, kun se jää aina 360 asteeseen..
Chaosworm wrote:
ukkeli wrote:teen räiskintä peliä mutta tulee mav voitteko auttaa
ja kiitos etukäteen tässä koodi

Code: Select all

 Koodi ylemmissä viesteissä.. 
User avatar
85 spider
Newcomer
Posts: 35
Joined: Thu Dec 10, 2009 7:01 pm
Location: Vihanti, Alpua

Re: Tyhmät kysymykset (I/2010)

Post by 85 spider »

Niin, että oisko tuolle setupcollisionille vaihtoehtoa, kun se ei aina toimi?
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim »

Ei ole, ja se toimii kun käytät sitä oikein. Ammukset + Öllömölliäiset -> ObjectsOverLap. Pelaaja + Öllömölliäiset -> SetupCollision. Tilemap + Pelaaja/Öllömölliäiset -> SetupCollision.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

JATothrim wrote:Ei ole, ja se toimii kun käytät sitä oikein.
Jaajaa, kyllä sille itseasiassa on* ja se ei toimi aina vaikka sitä käyttäisikin oikein. Vai toimiiko sinun mielestäsi se, että jos auto ajaa 150px/frame viiden pikselin kokoista seinää vastaan, auto menee siitä läpi?

*: ei toki valmista komentoa, mutta funktioitahan voi aina tehdä itse.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja »

Toimii, mikäli objektia liikuttaa pienemmissä pätkissä useita kertoja, mikä on suotavaa kovin nopeilla esineillä. Jos todella haluaa tehdä asian fiinisti, voi tehdä vakiotimestepillä pyörivää fysiikkakoodia (jolloin integrointivirheet pysyvät saman suuruisina eikä ainakaan suuria virheitä tule) ja laskea frameraten mukaan kuinka usein sitä ajelee.
User avatar
skinkken
Advanced Member
Posts: 453
Joined: Sat Sep 01, 2007 4:00 pm
Location: Helsinki

Re: Tyhmät kysymykset (I/2010)

Post by skinkken »

Ei tuo tormays kylla toimi aina. minulla yhdessa projektissa tyypin jasenet on laitettu tormaamaan toisiinta, mutta aina se ei toimi kunnolla. kyse on siis vihollisista, jotka liikkuvat minua kohti. mutta kun seina on edessa ja ne tormaavat seinaan ja toisiinsajos liikun, ne menevat toistensa sisaan.

ja tama viesti on kirjoitettu kommunikaattorilla jossa ei toimi a eika o (abcdefghijklmnopqrstuvwxyz#';)
Valmiit pelit: House of Horrors , Battle Zone , Über Ball , Itdoti , Space Chaos , Bloxxplosives
Projekti jota teen ehkä joskus vielä: viewtopic.php?f=11&t=2636 <-- Tämä rivi päivitetty 14.1.2013
User avatar
buke44
Active Member
Posts: 169
Joined: Sat May 23, 2009 8:10 pm
Location: Tampere

Re: Tyhmät kysymykset (I/2010)

Post by buke44 »

Eli tulee 39 : Invalid identifier name virheilmoistus kun koittaa viiitata mihin tahansa tyypin muuuttujaan. Eli siis pelkkä alla oleva koodi saa tuon tulemaan. Ennen toimi hyvin, saattaa olla että on tullut vaan joku stoppi tajuntaan ja olen tehnyt jotain perusjuttuja väärin, kun vanhat koodit toimii :D

Code: Select all

Type Ammukset
Field kohta
EndType



Ammus1=New (Ammukset)
Ammus1\kohta=1
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset (I/2010)

Post by koodaaja »

Ammus1 on pelkkä kokonaisluku tuossa tapauksessa, tämä voisi toimia paremmin:

Code: Select all

Ammus1.Ammukset = New(Ammukset)
User avatar
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 9:01 pm

Re: Tyhmät kysymykset (I/2010)

Post by ukkeli »

mavista päästiin mutta nyt ukko ampuu
vain kerran muuten toimii oikein
koodi

Code: Select all

Type AMMUS
Field obj
End Type 

Type vihut 
Field obj
End Type

FrameLimit 60 

ukko=LoadObject("Media\soldier.bmp",370)

pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF

enemy=LoadObject("Media\guy.bmp",370)
ShowObject enemy,OFF

Repeat 

If LeftKey() Then TurnObject ukko, 4
If RightKey() Then TurnObject ukko, -4
If UpKey() Then MoveObject ukko, 5
If DownKey() Then MoveObject ukko, -5


If KeyDown(cbkeyspace) And reload=0 Then 
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ukko 
CloneObjectOrientation luoti\obj,ukko 
reload=6
End If

If reroad>0 Then reload=reload-1

For vihu.vihut = Each vihut
PointObject vihu\obj,ukko
MoveObject vihu\obj,4
For luoti.AMMUS = Each AMMUS
MoveObject luoti\obj,10
If ObjectsOverlap(vihu\obj,luoti\obj) Then 
Delete luoti
Delete vihu
DeleteObject luoti\obj
DeleteObject vihu\obj
End If 
Next luoti
Next vihu

If Timer() - aika > 1000 Then  
aika = Timer()  
vihu.vihut = New(vihut)
vihu\obj=CloneObject (enemy)
PositionObject vihu\obj,Rand(0,100),Rand(0,100)
End If 

DrawScreen 

Until EscapeKey()  
...
DisturbedTK
Newcomer
Posts: 9
Joined: Tue Dec 29, 2009 7:12 pm

Re: Tyhmät kysymykset (I/2010)

Post by DisturbedTK »

tässäpä lähes suora kopio oppitunnista 8:

Code: Select all

Const PAINOVOIMA = -0.1 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


'Asetetaan ruutu hieman zoomattuun tilaan
SCREEN 320,240,0,cbsizable 
SetWindow "Painovoimaesimerkki",3 'suurenna ruudulle

'JOS PELI TÖKKII TAI PÄTKII TAI NYKII, MUUTA:
' 1) cbSizable -> cbFullScreen
' 2) poista rivi 23

FrameLimit 40 'rajoita nopeutta
'-------------------------------------------------
'lataa kartta, siirrä sitä ylöspäin ja animoi se.
kenttä=LoadMap("Media\cdm2.til","Media\tileset.bmp")
PositionObject kenttä,0,50
PlayObject kenttä,0,0,0.5

'lataa animaatiosarja oikealle, maskaa ja piilota se
oikea=LoadAnimObject("Media\zerorun1.bmp",47,51,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,30,51 'tämä pitää asettaa kaikkiin

'sama vasemmalle
vasen=LoadAnimObject("Media\zerorun2.bmp",47,51,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,30,51 'tämä pitää asettaa kaikkiin

'Tämä on varsinainen pelihahmo, joka piirretään ja
'jota hallitaan. Sille asetetaan törmäys->kartta
'Tätä EI PIILOTETA.
pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,30,51 'tämä pitää asettaa kaikkiin
'-------------------------------------------------
'Pääsilmukka
Repeat

    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        'juokse oikealle
        PaintObject pelihahmo,oikea 'vaihda kuvaa...
        If maassa Then PlayObject pelihahmo,2,11,0.25
        vauhti=2 'vauhtia oikealle
    ElseIf LeftKey() Then
        'juokse vasemmalle
        PaintObject pelihahmo,vasen 'vaihda kuvaa...
        If maassa Then PlayObject pelihahmo,2,11,0.25
        vauhti=-2 'vauhtia vasemmalle
    Else 
        'pysäytä animaatio, jos ei liikuta
        PlayObject pelihahmo,0
    EndIf
    
    'liikuta pelihahmoa
    TranslateObject pelihahmo,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA 'päivitä painovoima    
    
    UpdateGame 'päivitä törmäys
    CloneCameraPosition pelihahmo 'liimaa kamera
    
    maassa=0 'ilmassa jollei toisin käy ilmi
    törmäykset=CountCollisions(pelihahmo)
    'katsotaan tärmätäänkö kattoon tai lattiaan
    For i=1 To törmäykset
        If GetCollision(pelihahmo,i)=kenttä
            'lattia
            If CollisionAngle(pelihahmo,i)=90 Then 
                yPlus#=-1
                maassa=1 'jalat on maassa
            EndIf
            'katto
            If CollisionAngle(pelihahmo,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
    
    If GetMap(0,ObjectX(pelihahmo),ObjectY(pelihahmo)) = 137 Then
        If KeyHit(cbKeyZ) Then 
            yPlus#=3.5
         EndIf
     EndIf
       
    'jos ollaan ilmassa, näytä toisenlainen kuva
    If törmäykset=0 Then PlayObject pelihahmo,12,0
    
    'HYPPY (vain jos jalat maassa)
    If KeyHit(cbKeyZ) And maassa Then 
        yPlus#=4.5 'voimaa ylös päin
    EndIf

    DrawScreen 'piirrä näyttö

Until EscapeKey()
Ongelmany olis saaha painovoima pienemmäks kun ollaan tilessä 137. hjälp?
Last edited by DisturbedTK on Sun Jan 31, 2010 7:14 pm, edited 1 time in total.
Locked