Page 40 of 50

Re: Tyhmät kysymykset (I/2011)

Posted: Wed Aug 31, 2011 4:23 pm
by valscion
Ihminen wrote:

Code: Select all

If enemy\enemy_hp < 1 Then
PaintObject pahis\obj, dead_human
EndIf
Next pahis
Kun mulla on tollanen niin, kun on "tappanut" yhden "vihollisen" ja kun "tapan" seuraavan tulee Memory access violation! Miksi?
Jos laitan tuon "paintObjektin" tilalle "deleteobject pahis\obj, silloin ei tule mitään ongelmia.
Kaikki for, ja each hommat pitäisi olla ihan "oikein". (Tuossa koodinpätkässä ei niitä näy, mutta kyllä ne minulla on siellä).
Tuossa on ainakin se ongelma että kun kerran olet saanut vihulta hp:n alle yhden, niin joka ikisellä looppauskierroksella päällystät sen uudelleen dead_human-objektilla.

Kannattaisi ehkä mielummin tehdä erillinen type kuolleita vihuja varten, jolloin voisit poistaa tuon juuri tapetun vihun elävien vihujen type-kokoelmasta ja luoda uuden kuolleen vihun siihen kuolleiden typeen komennoilla CloneObject, CloneObjectPosition ja ehkä CloneObjectOrientation.

Re: Tyhmät kysymykset (I/2011)

Posted: Wed Aug 31, 2011 4:39 pm
by Awaclus
Ihminen wrote:

Code: Select all

If enemy\enemy_hp < 1 Then
PaintObject pahis\obj, dead_human
EndIf
Next pahis
Kun mulla on tollanen niin, kun on "tappanut" yhden "vihollisen" ja kun "tapan" seuraavan tulee Memory access violation! Miksi?
Jos laitan tuon "paintObjektin" tilalle "deleteobject pahis\obj, silloin ei tule mitään ongelmia.
Kaikki for, ja each hommat pitäisi olla ihan "oikein". (Tuossa koodinpätkässä ei niitä näy, mutta kyllä ne minulla on siellä).
Jos dead_human on kuva, se johtuu siitä, että sen nimen edessä pitäisi olla miinusmerkki.

Re: Tyhmät kysymykset (I/2011)

Posted: Wed Aug 31, 2011 5:18 pm
by skinkken
Tällainen huvittava cb:n bugi: (ei testattavaa koodia)

Code: Select all

'loopissa
If erikoisuus=2 Then
        SetWindow "3"
        SetWindow "4"
        For i=1 To 500
            If pati(i,1)=1 Then
                If ObjectsOverlap(pati(i,2),kivi) Then PlayObject kivi,1:pati(i,5)=1:jrty=PlaySound("files/sound/raani.wav",35)
            EndIf
        Next i
    EndIf
kun erikoisuus muutetaan kakkoseksi, peli MAVaa ja windowissa lukee 3. Eli peli ihan muuten vain tilttaa noiden kahden setwindowin välissä. Alun perin siinä oli playobject, ja vaikka poistan sen, se silti MAVaa siinä. :evil:

Yritin lisäillä random rivejä ja komentoja mutta ei auttanut. Muilla jotain ajatuksia?

EDIT:
Säädin koodin kanssa ja nyt se mavittaa drawgamessa:

Code: Select all

    SetWindow "r"
    DrawGame
    SetWindow "t"
ja yllätys yllätys windowissa lukee r.
EDIT:

Onnistuin korjaamaan ongelman. Peli lakkasi MAVittamasta kun korjasin yhden kirjoitus virheen joka ei liitynyt mitenkään asiaan. Huomasin kuitenkin että pelin olisi pitänyt jo mavittaa siinä kohdassa jossa oli kirjoitusvirhe, mutta mavi olikin oudosti siirtynyt drawgamen luokse. tämän voisi chaosworm lisätä usein kysyttyihin ongelmiin, jos jollakin muulla olisikin sama ongelma.


Re: Tyhmät kysymykset (I/2011)

Posted: Wed Aug 31, 2011 6:33 pm
by Awaclus
Tehty.

EDIT: Miksi tämän ketjun nimi on edelleen "Tyhmät kysymykset", vaikka aikoja sitten on jo todettu, että täällä kysymysten esittäminen ei ole millään tavalla tyhmää? Eikö esimerkiksi "Yksinkertaiset kysymykset", "Lyhyet kysymykset" tai "Kysymykset, joihin on lyhyt vastaus" olisi parempi nimi? Kysymysten ns. tyhmyys nostaa kynnystä kirjoittaa tähän ketjuun aloittelijana, ja sitten kun tekee oman ketjun jollekin kysymykselle, saa kilon suolaa niskaansa, kun on ollut tyhmä ja kirjoittanut väärään paikkaan.

Mielestäni se, että nimi on aina ollut "Tyhmät kysymykset" ja se, että foorumin wanhat käyttäjät ovat jo ehtineet tottua tähän nimeen ovat huonoja perusteluita nimen vaihtamisen tekemättä jättämiselle. Jos koskaan ei tapahtuisi mitään muutosta, koko ketjua ei edes olisi olemassa. Käsittääkseni CoolBasicin on myös tarkoitus olla aloittelijaystävällinen ohjelmointikieli, joten miksi foorumin sitten pitäisi olla konkariystävällisempi kuin aloittelijaystävällisempi?

Re: Tyhmät kysymykset (I/2011)

Posted: Fri Sep 02, 2011 7:34 am
by Laurenzo
ongelma includen kanssa:

Code: Select all

SCREEN 800,600
   
    1While 1
      2  If button(10,10,100,20,"Peliin") Then 
        3include "koodi.cb" 
        4If button(10,40,100,20,"lopeta") then end
        5DrawScreen
    6Wend
   7
  8  Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
         9  If MouseX()>x-1 And MouseY()>y-1 And MouseX()<x+w+1 And MouseY()<y+h+1 Then
         10    If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
        11  If MouseUp(1) Then Return True
        12  Else
        13  Color 220,220,220
        14  EndIf
         15     Box x+s,y,w-(s*2),h
           16   Box x,y+s,w,h-(s*2)
      17  Circle x,y,s*2
     18   Circle x+w-s*2,y,s*2
     19   Circle x+w-s*2,y+h-s*2,s*2
     20   Circle x,y+h-s*2,s*2
    21    Color cbblack
      22  CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
    23 EndFunction 
kun painan f5 nappia niin: File "koodi.cb" alerday inluded for now,include files are banned from being inluded twice sitten painan ok:ta

error line 7 (jotain vastaavaa)
mikä vikana??

Re: Tyhmät kysymykset (I/2011)

Posted: Fri Sep 02, 2011 9:08 am
by Latexi95
Laurenzo wrote:ongelma inluden kanssa:

Code: Select all

SCREEN 800,600
   
    1While 1
      2  If button(10,10,100,20,"Peliin") Then 
        3include "koodi.cb" 
        4If button(10,40,100,20,"lopeta") then end
        5DrawScreen
    6Wend
   7
  8  Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
         9  If MouseX()>x-1 And MouseY()>y-1 And MouseX()<x+w+1 And MouseY()<y+h+1 Then
         10    If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
        11  If MouseUp(1) Then Return True
        12  Else
        13  Color 220,220,220
        14  EndIf
         15     Box x+s,y,w-(s*2),h
           16   Box x,y+s,w,h-(s*2)
      17  Circle x,y,s*2
     18   Circle x+w-s*2,y,s*2
     19   Circle x+w-s*2,y+h-s*2,s*2
     20   Circle x,y+h-s*2,s*2
    21    Color cbblack
      22  CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
    23 EndFunction 
kun painan f5 nappia niin: File "koodi.cb" alerday inluded for now,include files are banned from being inluded twice sitten painan ok:ta

error line 7 (jotain vastaavaa)
mikä vikana??
Includea ei voi käyttää noin. Eikä kannata. Laita include koodin alkuun, ja mene siellä olevaan peliin funktion avulla.

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Sep 03, 2011 8:35 pm
by Kumiankka
Latexi95 wrote:
Laurenzo wrote:ongelma inluden kanssa:

Code: Select all

Koodia...
kun painan f5 nappia niin: File "koodi.cb" alerday inluded for now,include files are banned from being inluded twice sitten painan ok:ta

error line 7 (jotain vastaavaa)
mikä vikana??
Includea ei voi käyttää noin. Eikä kannata. Laita include koodin alkuun, ja mene siellä olevaan peliin funktion avulla.
Kyllä sitä includea voi käyttää noin, mutta sieltä puuttuu vain EndIf välistä... Tässä mielestäni täysin toimiva versio:

Code: Select all

SCREEN 800,600
   
While 1
	If button(10,10,100,20,"Peliin") Then 
		Include "koodi.cb" 
	EndIf
	If button(10,40,100,20,"lopeta") then end
	DrawScreen
Wend

Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
	If MouseX()>x-1 And MouseY()>y-1 And MouseX()<x+w+1 And MouseY()<y+h+1 Then
		If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
		If MouseUp(1) Then Return True
	Else
		Color 220,220,220
	EndIf
	Box x+s,y,w-(s*2),h
	Box x,y+s,w,h-(s*2)
	Circle x,y,s*2
	Circle x+w-s*2,y,s*2
	Circle x+w-s*2,y+h-s*2,s*2
	Circle x,y+h-s*2,s*2
	Color cbblack
	CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
EndFunction 

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Sep 03, 2011 10:11 pm
by Ihminen
Kuinka saisin tolla "Box" komennolla tehdyn laatikon näkymään objektien ja tilesterillä tehtyjen tasojen päällä?

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Sep 03, 2011 10:29 pm
by Jonez
Käytä komentoa DrawGame ennen niitä piirtokomentoja, jotka haluat piirtää objektien päälle. Älä käytä enempää kuin yhtä DrawGame-komentoa, ellet piirrä toiseen puskuriin (esim. DrawToImage).

Re: Tyhmät kysymykset (I/2011)

Posted: Sun Sep 04, 2011 2:36 pm
by Dimple
Kumiankka wrote:Kyllä sitä includea voi käyttää noin, mutta sieltä puuttuu vain EndIf välistä... Tässä mielestäni täysin toimiva versio:

Code: Select all

Koodia...
Onpas ovela tapa toteuttaa valikko. :D

Re: Tyhmät kysymykset (I/2011)

Posted: Mon Sep 05, 2011 8:30 am
by Laurenzo
Kuinka objektin kokoa pystyy muuttamaan nopeasti ja helposti?

Re: Tyhmät kysymykset (I/2011)

Posted: Mon Sep 05, 2011 9:29 am
by Jonez
Code-boxissa olevilla komennoilla, ja suunnilleen siinä näytetyssä järjestyksessä. Tämä ei ehkä ole erityisen nopeaa suorityskyvyn kannalta (älä tee sitä reaaliajassa), koska ResizeImage on niin hidas. Voit vaihtoehtoisesti käyttää Marcoderin ScaleImage()-funktiota, joka on paljon nopeampi kuin ResizeImage.

Voi olla että saat suurennukset (ja pyöritykset) toimimaan reaaliajassa, jos pyörität kuvat etukäteen, ja skaalaat ne ScaleImage():lla. Tällöin ei ehkä kannata käyttää objekteja ollenkaan.

Code: Select all

obj = MakeObject( pyoritysarvo )
img = PaintObject( "kuva.png" )
PaintObject obj, -img

//Kun suurennetaan: 
tempImg = CloneImage( img ) //Kloonataan kuva niin alkuperäinen säilyy koskemattomana
ResizeImage tempImg, haluttuLeveys, haluttuKorkeus //suurennetaan
PaintObject obj, -tempImg
DeleteImage tempImg //tuhotaan kuva, sitä ei enää käytetä

Re: Tyhmät kysymykset (I/2011)

Posted: Fri Sep 09, 2011 11:50 pm
by Ihminen
Kun on tuo komento Objectorder, kuinka saisin muutettua järjestystä niin, että haluamani objekti menee toiseksi viimeiseksi, eikä viimeiseksi, koska jos se tietty objekti menee viimeiseksi sitä ei enää näy, koska LoadMap...

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Sep 10, 2011 1:19 am
by Jonez
Siirrä kartta viimeiseksi heti kun olet asettanut objektisi viimeiseksi.

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Sep 10, 2011 9:28 am
by Ihminen
Jonez wrote:Siirrä kartta viimeiseksi heti kun olet asettanut objektisi viimeiseksi.
Miten mä saan siirrettyä sen kartan viimeiseksi? xD

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Sep 10, 2011 11:34 am
by naputtelija
Ihminen wrote:
Jonez wrote:Siirrä kartta viimeiseksi heti kun olet asettanut objektisi viimeiseksi.
Miten mä saan siirrettyä sen kartan viimeiseksi? xD

Code: Select all

ObjectOrder kartta, [suuri negatiivinen luku]

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Sep 10, 2011 12:39 pm
by koodaaja
Ei mikään suuri, -1 siirtää alimmaksi ja 1 päällimmäiseksi.

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Sep 10, 2011 1:00 pm
by Paroni
Huomentapäivää vaan kaikille. Sellasta vaan kyselisin, että miksi tämä palauttaa maailmaan X-koordinaatin muuten oikein... paitsi + muuttuu - ja toisinpäin?

Code: Select all

    If MouseHit (1) Then
        mX = (ScreenWidth() / 2.0) - bX + CameraX()
        mY = (ScreenHeight() / 2.0) - bY + CameraY()
    EndIf
Tässä vielä koko koodinpätkä jos tahdotte itse kokeilla. (Vähäiset) Kommentoinnit Lontooksi.

Code: Select all

//RPG Test 2
//Point 'n' Click -system
//10.9.2011 | 00:52
//

Type NPC
    Field Name As String
    Field nX
    Field nY
EndType

SCREEN 800, 600, 32

//VARIABLES
//Grid related
Grid = 32 //Grid size

//Player related
pX = -16 //Player X
pY = 12 //Player Y

For n = 1 To 1
    character.NPC = New (NPC)
    character\nX = -16
    character\nY = 268
    character\Name = "Generic NPC"
Next n

Repeat

    DrawGame
    
    Gosub UpdateVariables
    Gosub UpdateControls
    
    DrawToWorld ON, OFF, ON
    Color 0, 95, 195
    Box pX, pY, Grid, Grid, 1 //Player box
    Color 195, 95, 0
    For character.NPC = Each NPC
        Box character\nX, character\nY, Grid, Grid, 1
        Text character\nX, character\nY + 13, ""+character\name
    Next character
    DrawToWorld OFF, OFF, OFF
    Color 255, 255, 255
    Text 0, 0, "FPS: " +FPS()
    Text 0, 10, "X: " +mX +" Y: " +mY
    Box bX, bY, Grid, Grid, 0 //Grid cursor -box

    DrawScreen

Forever 

UpdateVariables:

    //Update box coordinates
    bX = (MouseX() / Grid) * Grid
    bY = (MouseY()  / Grid) * Grid
    //Change the screen coordinates to world coordinates when clicked
    If MouseHit (1) Then
        mX = (ScreenWidth() / 2.0) - bX + CameraX()
        mY = (ScreenHeight() / 2.0) - bY + CameraY()
    EndIf
    
Return 

UpdateControls:
    
Return 
EDIT: Niin ja tosiaan mX = -mX toimii hyvin. Mietin vain miksi tuo ei toimi.

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Sep 10, 2011 2:02 pm
by Jonez
Koska ruutukoordinaatit lasketaan ruudun vasemmasta yläkulmasta niin, että x-akseli on positiivinen oikealle ja y-akseli positiivinen alaspäin. Maailmakoordinaatit taas alkavat ruudun keskeltä (kun camX- ja Y ovat 0), ja x-akseli on oikealle positiivinen, kun taas y-akseli kasvaakin ylöspäin. Eli maailmakoordinaattien ja ruutukoordinaattien y-akselit ovat vastakkaiset.

Edit. vastasin vähän kysymyksen vierestä, mutta idea oli silti oikea. Tässä kuitenkin oikeanlainen koodi, missä koordinaatit pysyvät kohdillaan vaikka kameraa liikuttaisi:

Code: Select all

UpdateVariables:

    //Update box coordinates
    bX = (MouseX() / Grid) * Grid
    bY = (MouseY()  / Grid) * Grid
    //Change the screen coordinates to world coordinates when clicked
    If MouseHit (1) Then
        mX = (ScreenWidth() / 2.0) + bX + CameraX()
        mY = (ScreenHeight() / 2.0) - bY + CameraY()
    EndIf
    
Return 

UpdateControls:
    MoveCamera (RightKey() - LeftKey()) * Grid, (UpKey() - DownKey()) * Grid
Return 

Re: Tyhmät kysymykset (I/2011)

Posted: Sat Sep 10, 2011 2:35 pm
by Paroni
Jonez wrote:Koska ruutukoordinaatit lasketaan ruudun vasemmasta yläkulmasta niin, että x-akseli on positiivinen oikealle ja y-akseli positiivinen alaspäin. Maailmakoordinaatit taas alkavat ruudun keskeltä (kun camX- ja Y ovat 0), ja x-akseli on oikealle positiivinen, kun taas y-akseli kasvaakin ylöspäin. Eli maailmakoordinaattien ja ruutukoordinaattien y-akselit ovat vastakkaiset.

Edit. vastasin vähän kysymyksen vierestä, mutta idea oli silti oikea. Tässä kuitenkin oikeanlainen koodi, missä koordinaatit pysyvät kohdillaan vaikka kameraa liikuttaisi:

Code: Select all

UpdateVariables:

    //Update box coordinates
    bX = (MouseX() / Grid) * Grid
    bY = (MouseY()  / Grid) * Grid
    //Change the screen coordinates to world coordinates when clicked
    If MouseHit (1) Then
        mX = (ScreenWidth() / 2.0) + bX + CameraX()
        mY = (ScreenHeight() / 2.0) - bY + CameraY()
    EndIf
    
Return 

UpdateControls:
    MoveCamera (RightKey() - LeftKey()) * Grid, (UpKey() - DownKey()) * Grid
Return 
Toimiihan tuo, mutta miksi esim. mX on 784 kun klikataan NPC:n ruutua joka on piirretty X koordinaattiin 16?

Code: Select all

...
    character\nX = -16
    character\nY = 268
...
        Box character\nX, character\nY, Grid, Grid, 1
...
Vai ymmärsinkö jotain nyt väärin?