Tyhmät kysymykset (I/2011)

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

Re: Tyhmät kysymykset (I/2011)

Post by valscion » Wed Aug 31, 2011 4:23 pm

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.
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

Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus » Wed Aug 31, 2011 4:39 pm

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.

User avatar
skinkken
Advanced Member
Posts: 453
Joined: Sat Sep 01, 2007 4:00 pm
Location: Helsinki

Re: Tyhmät kysymykset (I/2011)

Post by skinkken » Wed Aug 31, 2011 5:18 pm

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.

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

Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2011)

Post by Awaclus » Wed Aug 31, 2011 6:33 pm

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?

User avatar
Laurenzo
Member
Posts: 85
Joined: Mon Apr 25, 2011 8:28 am
Location: Tampere
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Laurenzo » Fri Sep 02, 2011 7:34 am

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??
Last edited by Laurenzo on Sat Sep 10, 2011 5:32 pm, edited 1 time in total.
Aloittelija koodari joka
osaa jo jotain (ehkä) :)
KOTISIVU

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

Re: Tyhmät kysymykset (I/2011)

Post by Latexi95 » Fri Sep 02, 2011 9:08 am

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.

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

Re: Tyhmät kysymykset (I/2011)

Post by Kumiankka » Sat Sep 03, 2011 8:35 pm

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 

Ihminen
Newcomer
Posts: 34
Joined: Tue Jun 14, 2011 9:13 pm

Re: Tyhmät kysymykset (I/2011)

Post by Ihminen » Sat Sep 03, 2011 10:11 pm

Kuinka saisin tolla "Box" komennolla tehdyn laatikon näkymään objektien ja tilesterillä tehtyjen tasojen päällä?

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

Re: Tyhmät kysymykset (I/2011)

Post by Jonez » Sat Sep 03, 2011 10:29 pm

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).
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 6:43 pm

Re: Tyhmät kysymykset (I/2011)

Post by Dimple » Sun Sep 04, 2011 2:36 pm

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

User avatar
Laurenzo
Member
Posts: 85
Joined: Mon Apr 25, 2011 8:28 am
Location: Tampere
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by Laurenzo » Mon Sep 05, 2011 8:30 am

Kuinka objektin kokoa pystyy muuttamaan nopeasti ja helposti?
Aloittelija koodari joka
osaa jo jotain (ehkä) :)
KOTISIVU

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

Re: Tyhmät kysymykset (I/2011)

Post by Jonez » Mon Sep 05, 2011 9:29 am

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ä
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

Ihminen
Newcomer
Posts: 34
Joined: Tue Jun 14, 2011 9:13 pm

Re: Tyhmät kysymykset (I/2011)

Post by Ihminen » Fri Sep 09, 2011 11:50 pm

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...

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

Re: Tyhmät kysymykset (I/2011)

Post by Jonez » Sat Sep 10, 2011 1:19 am

Siirrä kartta viimeiseksi heti kun olet asettanut objektisi viimeiseksi.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

Ihminen
Newcomer
Posts: 34
Joined: Tue Jun 14, 2011 9:13 pm

Re: Tyhmät kysymykset (I/2011)

Post by Ihminen » Sat Sep 10, 2011 9:28 am

Jonez wrote:Siirrä kartta viimeiseksi heti kun olet asettanut objektisi viimeiseksi.
Miten mä saan siirrettyä sen kartan viimeiseksi? xD

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

Re: Tyhmät kysymykset (I/2011)

Post by naputtelija » Sat Sep 10, 2011 11:34 am

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]
<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
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 » Sat Sep 10, 2011 12:39 pm

Ei mikään suuri, -1 siirtää alimmaksi ja 1 päällimmäiseksi.

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

Re: Tyhmät kysymykset (I/2011)

Post by Paroni » Sat Sep 10, 2011 1:00 pm

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.

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

Re: Tyhmät kysymykset (I/2011)

Post by Jonez » Sat Sep 10, 2011 2:02 pm

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 
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

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

Re: Tyhmät kysymykset (I/2011)

Post by Paroni » Sat Sep 10, 2011 2:35 pm

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?
Attachments
X.png
X.png (6.93 KiB) Viewed 5136 times

Locked