Tyhmät kysymykset (I/2009)
Re: Tyhmät kysymykset
kuinka tarkastaa onko joku tietyn neliö alueen sisällä kun neliö voi olla eri kulmassa
Re: Tyhmät kysymykset
Myös voit käyttää boxoverlap()-komentoa, mutta se ei toimi noihin kulmien muutoksiin. Jos alue on ympyrä pystys Distance()-komennon avulla selvittämään, onko kappale alueen sisällä.zHelmet wrote:kuinka tarkastaa onko joku tietyn neliö alueen sisällä kun neliö voi olla eri kulmassa
Jos alue on neliö voit katsoa onko koordinaatit alueen sisällä.. Helpoiten pääsisit muuttamalla tuon imageksi ja käyttämällä imagen komentoja. Tein nopeasti tälläisen function.
EDIT: Ääh tuo tarkistaa vain yhdessä kulmassa. Teen toisen, kunhan aikaa on. Oli vähän vaikeampi kysymys sittenkin
Code: Select all
AddText "Siirrä hiiri neliön päälle"
Repeat
If aa(MouseX(),MouseY(),100,100,70,50)>0 Then Color cbred Else Color cbwhite
Box 100,100,70,50
DrawScreen
Forever
// pisteen paikka (2#,y2#)
// neliön alkupaikka (x1#,y1#) ja koko (KokoX,KokoY)
Function aa(x2#,y2#,x1#,y1#,KokoX,KokoY)
If x2#<=x1#+kokoX And x2#>=x1# Then
If y2#<=y1#+kokoY And y2#>=y1# Then
Return 1
EndIf
EndIf
EndFunction
Tein function joka laskee onko piste viivan oikealla vai vasemmalla puolella.
Code: Select all
SCREEN 800,600
AddText "Siirrä hiiri neliön päälle"
Type LINET
Field x1# 'viivan alku
Field y1#
Field y2# 'viivan loppu
Field x2#
Field kx# ' neliön kekikohta
Field ky#
Field size
EndType
AddSquake(200,200,100,10)
AddSquake(500,300,10,10)
Repeat
col=0
// hiiren tarkistus
For an.LINET=Each LINET
dis=Distance(MouseX(),MouseY(),an\kx,an\ky)
If dis>=(an\size*Sqrt(2))/2 Then ' on aina sisällä, jos on pienempi kuin (an\size*sqrt(2))/2 --(todistettu pythagoralla)
If MouseX()<=Max(an\x1,an\x2) And MouseX()>=Min(an\x1,an\x2)
If MouseY()<=Max(an\y1,an\y2) And MouseY()>=Min(an\y1,an\y2)
If InOrOut(MouseX(),MouseY(), an\x1, an\y1, an\x2, an\y2) Then
col=1
EndIf
EndIf
EndIf
Else
col=1
EndIf
Next an
// liike
If Timer()>=aika+10 'And KeyDown(cbkeyspace) Then
kulma#=kulma#+1
For aa.LINET=Each LINET
i+1
aa\x1 = aa\kx + Sin(kulma#+i*90)*aa\size
aa\y1 = aa\ky - Cos(kulma#+i*90)*aa\size
aa\x2 = aa\kx + Sin(kulma#+(i+1)*90)*aa\size
aa\y2 = aa\ky - Cos(kulma#+(i+1)*90)*aa\size
Next aa
aika=Timer()
EndIf
//värjäys
If col=1 Then Color cbred Else Color cbwhite
// piirto
For an.LINET=Each LINET
Line an\x1, an\y1, an\x2, an\y2
Next an
Color cbwhite
Text 600,10,"FPS: "+FPS()
DrawScreen
Forever
Function InOrOut(px#, py#, l1x#, l1y#, l2x#, l2y#)
ang1#=GetAngle(l1x#, l1y#, l2x#, l2y#)
If ang1#<=90 And ang1#>=0
suunta=1
ElseIf ang1#<=180 And ang1#>=90
suunta=2
ElseIf ang1#<=270 And ang1#>=180
suunta=3
Else
suunta=4
EndIf
ang1#=-ang1#+90
For a=1 To Distance(l1x#, l1y#, l2x#, l2y#)
xn2# = l1x# + Sin(ang1#)*(a)
yn2# = l1y# - Cos(ang1#)*(a)
Select suunta
Case 1 : If px#>=xn2# And py#>=yn2# Then Return 1 ' pienempi, suurempi vasen ylä
Case 2 : If px#>=xn2# And py#<=yn2# Then Return 1 ' suurempi, pienempi vasen ala
Case 3 : If px#<=xn2# And py#<=yn2# Then Return 1 ' pienempi, pienempi oikea ala
Case 4 : If px#<=xn2# And py#>=yn2# Then Return 1 ' pienempi, suurempi oikea ylä
EndSelect
Next a
EndFunction
Function AddSquake(xx1#,yy1#,koko,ang#)
ang1#=-ang1#+90
For i=1 To 4
aa.LINET=New(LINET)
aa\kx=xx1#
aa\ky=yy1#
aa\size=koko
aa\x1 = aa\kx + Sin(ang#+i*90)*koko
aa\y1 = aa\ky - Cos(ang#+i*90)*koko
aa\x2 = aa\kx + Sin(ang#+(i+1)*90)*koko
aa\y2 = aa\ky - Cos(ang#+(i+1)*90)*koko
Next i
EndFunction
Last edited by Jonhu on Thu Dec 18, 2008 5:16 pm, edited 3 times in total.
Re: Tyhmät kysymykset
Terve, minä täällä taas.
Ylhäältä kuvattuun räiskintääni pitäisi saada ominaisuus, että nurkan taakse ei näe vaan siellä on mustaa. Miten tämän voisi toteuttaa? Peli käyttää tilekarttoja.
Ylhäältä kuvattuun räiskintääni pitäisi saada ominaisuus, että nurkan taakse ei näe vaan siellä on mustaa. Miten tämän voisi toteuttaa? Peli käyttää tilekarttoja.
Re: Luultavasti aika tyhmiä kysymyksiä...
Joo,siis suurin osa on vaa liitetty jostai ...Mä vasta harjottelen ... Kiitti avusta!!
Viel se bottien ampuminen jäi vaivaamaa.... En oikein saa selkoo hyödyllisellä tasolla siit ampuminen2 tutoriaalist...
Voisko joku auttaa???? THX
Viel se bottien ampuminen jäi vaivaamaa.... En oikein saa selkoo hyödyllisellä tasolla siit ampuminen2 tutoriaalist...
Voisko joku auttaa???? THX
Re: Luultavasti aika tyhmiä kysymyksiä...
Ei bottien tarvitse kuin osoittaa hahmoon PointObject-komennolla ja ampua tietyin intervallein. Liikkumisen voi hoitaa TranslateObjectilla.
Ratkaisit juuri universaaliongelman! Hienoa, ota keksi.
Filosofia on ajattelun taidetta, mutta sen maalari elää juoden apurahojaan masennukseensa.
Filosofia on ajattelun taidetta, mutta sen maalari elää juoden apurahojaan masennukseensa.
Re: Tyhmät kysymykset
Jeps, eli olis tällainen kysymys:
Hidastuuko funktion nopeus jos siihen lisää parametreja, jotka ovat valinnaisia?
Olen tekemässä funktiota, joka luo pinnan, mutta pinnassahan tunnetusti voi olla loputon määrä kulmia.
Olisiko parempi tehdä erikseen funktio, joka sitten luo niitä isoja pintoja kuin tunkea yhteen funktioon hirveästi valinnaisia parametrejä?
Funktiota kutsutaan suht usein.
Hidastuuko funktion nopeus jos siihen lisää parametreja, jotka ovat valinnaisia?
Olen tekemässä funktiota, joka luo pinnan, mutta pinnassahan tunnetusti voi olla loputon määrä kulmia.
Olisiko parempi tehdä erikseen funktio, joka sitten luo niitä isoja pintoja kuin tunkea yhteen funktioon hirveästi valinnaisia parametrejä?
Funktiota kutsutaan suht usein.
Re: Tyhmät kysymykset
Mikä vika kun tulee "error memory acces violation"
Code: Select all
'''Tekstiseikkailun alku'''
mem=MakeMEMBlock(32)
SCREEN 640,480
Logo=LoadFont ("Snap ITC", 30)
Ohjeet=LoadFont ("Lucida Calligraphy" ,25)
Anykey=LoadFont ("Tahoma", 15)
Times=LoadFont ("Times New Roman", 17)
Alkusivu:
Repeat
Include "vilkku.cb"
Until WaitKey()
'Sivu joka kysyy nimeä'
Nimi:
ClearText
Color cbMagenta
Repeat
name$=input(">>")
DrawScreen
If KeyHit (28) Then Goto Alkusanat
Forever
CloseInput
Alkusanat:
Repeat
Color cbsilver
SetFont Times
Text 0,0,name$+"Haluatko olla"
Text 0,19,"1)Astronautti"
Text 0,38,"2)Kosmonautti"
Text 0,56,"3)Sergei Gorbatsov"
DrawScreen
If KeyHit(2) Then
Goto Astronauttialku
ElseIf KeyHit(3) Then
Goto Kosmonauttialku
ElseIf KeyHit(4) Then
Goto Sergeialku
Else
Goto ohje
EndIf
Until EscapeKey()
ohje:
Repeat
Text 50,50,"Paina osoitettua näppäintä"
Until EscapeKey ()
Astronauttialku:
Repeat
Text 50,50,"Paina osoitettua näppäintä"
Until EscapeKey ()
Kosmonauttialku:
Repeat
Text 50,50,"Paina osoitettua näppäintä"
Until EscapeKey ()
Sergeialku:
Repeat
Text 50,50,"Paina osoitettua näppäintä"
Until EscapeKey ()
DeleteMEMBlock mem
Re: Tyhmät kysymykset
"Luultavasti tyhmä kysymys" liitetty tänne.
Re: Tyhmät kysymykset
Lähinnä tulisi mieleen, että joko fontit eivät olisi saatavilla tai sitten vilkku.cb ei löydy. Muistaakseni kannattaa olla tarkkana, että se on vilkku.cb eikä esim vilkku.CB eli katsoppas onko pääte pienin kirjaimin. En muuta nyt keksi.Untsk1 wrote:Mikä vika kun tulee "error memory acces violation"Code: Select all
'''Tekstiseikkailun alku''' mem=MakeMEMBlock(32) SCREEN 640,480 Logo=LoadFont ("Snap ITC", 30) Ohjeet=LoadFont ("Lucida Calligraphy" ,25) Anykey=LoadFont ("Tahoma", 15) Times=LoadFont ("Times New Roman", 17) Alkusivu: Repeat Include "vilkku.cb" Until WaitKey() 'Sivu joka kysyy nimeä' Nimi: ClearText Color cbMagenta Repeat name$=input(">>") DrawScreen If KeyHit (28) Then Goto Alkusanat Forever CloseInput Alkusanat: Repeat Color cbsilver SetFont Times Text 0,0,name$+"Haluatko olla" Text 0,19,"1)Astronautti" Text 0,38,"2)Kosmonautti" Text 0,56,"3)Sergei Gorbatsov" DrawScreen If KeyHit(2) Then Goto Astronauttialku ElseIf KeyHit(3) Then Goto Kosmonauttialku ElseIf KeyHit(4) Then Goto Sergeialku Else Goto ohje EndIf Until EscapeKey() ohje: Repeat Text 50,50,"Paina osoitettua näppäintä" Until EscapeKey () Astronauttialku: Repeat Text 50,50,"Paina osoitettua näppäintä" Until EscapeKey () Kosmonauttialku: Repeat Text 50,50,"Paina osoitettua näppäintä" Until EscapeKey () Sergeialku: Repeat Text 50,50,"Paina osoitettua näppäintä" Until EscapeKey () DeleteMEMBlock mem
Re: Tyhmät kysymykset
Miten saisin että jos luoti osuu enemyyn niin exp =exp+10 ja enemy häviäisi?
Re: Tyhmät kysymykset
Code: Select all
for luoti.luodit = each luodit
if objectsoverlap(luoti\obj,vihu) then
exp=exp+10
deleteobject vihu
endif
next luoti
Tuossa siis vihu on tehty objektilla ja luodit ovat typeillä tehtyjä.
Last edited by Sepi on Fri Dec 19, 2008 6:52 pm, edited 1 time in total.
Re: Tyhmät kysymykset
Joo eli sain sen memory violationin pois mutta nyt kun toi printtaa ton alkusanat ni se näyttää !]$£€$€$£€{[$€]}]}{
Re: Tyhmät kysymykset
Ei toimi ja olen tehnyt luodin objektinaSepi wrote:Code: Select all
for luoti.luodit = each luodit if objectsoverlap(luoti\obj,vihu) then exp=exp+10 deleteobject vihu endif next luoti Tuossa siis vihu on tehty objektilla ja luodit ovat typeillä tehtyjä.
Re: Tyhmät kysymykset
Mikä siinä ei toimi? Mavittaako se? Antaako se jotain muuta erroria? Vai jotain muuta?
Koodisi sisennettynä ja tyyppien nimet isolla kirjoitettuna.
Code: Select all
For luoti.LUODIT = Each LUODIT
If ObjectsOverlap(luoti\obj,vihu) Then
exp=exp+10
DeleteObject vihu
EndIf
next luoti
Re: Tyhmät kysymykset
Taas kyselen täällä...
Eli nyt en saa else:ä toimimaan. Alla on pätkä koodia joka ei toimi. En millään ymmärrä mikä siinä muka on vikana. Tulee virhekoodi 87, eli ilmeisesti else on väärässä paikassa. Minne se siis kuuluisi laittaa?
Jos ja ilmeisesti kun joku osaa auttaa olisin hyvin kiitollinen hänelle.
Eli nyt en saa else:ä toimimaan. Alla on pätkä koodia joka ei toimi. En millään ymmärrä mikä siinä muka on vikana. Tulee virhekoodi 87, eli ilmeisesti else on väärässä paikassa. Minne se siis kuuluisi laittaa?
Jos ja ilmeisesti kun joku osaa auttaa olisin hyvin kiitollinen hänelle.
Code: Select all
ensimmäinen$ = 2
If ensimmäinen$= 2 Then Print "Toimii"
Else Print "Ei toimi"
End If
- TheDuck
- Devoted Member
- Posts: 632
- Joined: Sun Aug 26, 2007 3:51 pm
- Location: C:\Program Files\Tuusula\
Re: Tyhmät kysymykset
Code: Select all
ensimmäinen$ = "2"
If ensimmäinen$= "2" Then
Print "Toimii"
Else
Print "Ei toimi"
EndIf
^^
Re: Tyhmät kysymykset
Kummallista. Fonttihan tuossa bugaa luultavasti mutta luulisi times new romanin toimivan. :/Untsk1 wrote:Joo eli sain sen memory violationin pois mutta nyt kun toi printtaa ton alkusanat ni se näyttää !]$£€$€$£€{[$€]}]}{
Re: Tyhmät kysymykset
Tyhmä kysymys omaan lähettäämi ratkaisuun
Onko järkevämpää kirjoittaa 4 muuttujaa fieldiin, vai laskea ne uudestaan joka kierros sininin ja cosinin avulla?
Pääsisin eroon näistä, jos lasken joka kierros uudestaan paikat..
Field x1# 'viivan alku
Field y1#
Field y2# 'viivan loppu
Field x2#
Myös hienompia ratkaisuja samaan tehtävään saa esittää minulle
EDIT: Jos tulee error ammuksen osuessa, niin toden näköisesti ongelma on ammuksen poistamisen puolella. Esim. Olet poistanut typen ja tarkkailet sitä vielä sen jälkeen. Sinun pitää poistaa se vasta viimeiseksi...
Onko järkevämpää kirjoittaa 4 muuttujaa fieldiin, vai laskea ne uudestaan joka kierros sininin ja cosinin avulla?
Pääsisin eroon näistä, jos lasken joka kierros uudestaan paikat..
Field x1# 'viivan alku
Field y1#
Field y2# 'viivan loppu
Field x2#
Myös hienompia ratkaisuja samaan tehtävään saa esittää minulle
Code: Select all
SCREEN 800,600
AddText "Siirrä hiiri neliön päälle"
Type LINET
Field x1# 'viivan alku
Field y1#
Field y2# 'viivan loppu
Field x2#
Field kx# ' neliön kekikohta
Field ky#
Field size
EndType
AddSquake(200,250,100,10)
Repeat
col=0
// hiiren tarkistus
For an.LINET=Each LINET
dis=Distance(MouseX(),MouseY(),an\kx,an\ky)
If dis>an\size 'liian kaukana ollakseen sisällä
ElseIf dis>=(an\size*Sqrt(2))/2 ' on aina sisällä, jos on pienempi kuin (an\size*sqrt(2))/2 --(todistettu pythagoralla)
If MouseX()<=Max(an\x1,an\x2) And MouseX()>=Min(an\x1,an\x2)
If MouseY()<=Max(an\y1,an\y2) And MouseY()>=Min(an\y1,an\y2)
If InOrOut(MouseX(),MouseY(), an\x1, an\y1, an\x2, an\y2) Then
col=1
EndIf
EndIf
EndIf
Else ' pakosti sisällä
col=1
EndIf
Next an
// liike
If Timer()>=aika+10 'And KeyDown(cbkeyspace) Then
kulma#=kulma#+1
For aa.LINET=Each LINET
i+1
aa\x1 = aa\kx + Sin(kulma#+i*90)*aa\size
aa\y1 = aa\ky - Cos(kulma#+i*90)*aa\size
aa\x2 = aa\kx + Sin(kulma#+(i+1)*90)*aa\size
aa\y2 = aa\ky - Cos(kulma#+(i+1)*90)*aa\size
Next aa
aika=Timer()
EndIf
//värjäys
If col=1 Then Color cbred Else Color cbwhite
// piirto
For an.LINET=Each LINET
Line an\x1, an\y1, an\x2, an\y2
Next an
Color cbwhite
Text 600,10,"FPS: "+FPS()
DrawScreen
Forever
Function InOrOut(px#, py#, l1x#, l1y#, l2x#, l2y#)
ang1#=GetAngle(l1x#, l1y#, l2x#, l2y#)
If ang1#<=90 And ang1#>=0
suunta=1
ElseIf ang1#<=180 And ang1#>=90
suunta=2
ElseIf ang1#<=270 And ang1#>=180
suunta=3
Else
suunta=4
EndIf
ang1#=-ang1#+90
For a=1 To Distance(l1x#, l1y#, l2x#, l2y#)
xn2# = l1x# + Sin(ang1#)*(a)
yn2# = l1y# - Cos(ang1#)*(a)
Select suunta
Case 1 : If px#>=xn2# And py#>=yn2# Then Return 1 ' pienempi, suurempi vasen ylä
Case 2 : If px#>=xn2# And py#<=yn2# Then Return 1 ' suurempi, pienempi vasen ala
Case 3 : If px#<=xn2# And py#<=yn2# Then Return 1 ' pienempi, pienempi oikea ala
Case 4 : If px#<=xn2# And py#>=yn2# Then Return 1 ' pienempi, suurempi oikea ylä
EndSelect
Next a
EndFunction
Function AddSquake(xx1#,yy1#,koko,ang#)
For i=1 To 4
aa.LINET=New(LINET)
aa\kx=xx1#
aa\ky=yy1#
aa\size=koko
aa\x1 = aa\kx + Sin(ang#+i*90)*koko
aa\y1 = aa\ky - Cos(ang#+i*90)*koko
aa\x2 = aa\kx + Sin(ang#+(i+1)*90)*koko
aa\y2 = aa\ky - Cos(ang#+(i+1)*90)*koko
Next i
EndFunction
Last edited by Jonhu on Thu Dec 18, 2008 7:03 pm, edited 1 time in total.
Re: Tyhmät kysymykset
Tein tuon koodisi mutta mavittaa kun ammun enemyäMAVmaggot wrote:Mikä siinä ei toimi? Mavittaako se? Antaako se jotain muuta erroria? Vai jotain muuta?Koodisi sisennettynä ja tyyppien nimet isolla kirjoitettuna.Code: Select all
For luoti.LUODIT = Each LUODIT If ObjectsOverlap(luoti\obj,vihu) Then exp=exp+10 DeleteObject vihu EndIf next luoti
Re: Tyhmät kysymykset
Voiskos joku ystävällinen sielu tehdä mulle esimerkkiä miten saan kolmion kääntymään (rotation?) ? Ilmeisesti siihen siniä ja kosiniä tarvitaan mutta mulle ei uppoo kaaliin., vaikka oon pari tuntia ollu koneella ja matikankirjanki aihetta käsittelevät sivut lukenu. Alkaa hermostua tässä pikkuhiljaa
Tuossa olis tuota pohjaa.
Tuossa olis tuota pohjaa.
Code: Select all
SCREEN 1024,768
x1 = 500
x2 = 400
x3 = 600
y1 = 400
y2 = 300
y3 = 300
Color 255,0,0
Repeat
Line x1,y1,x2,y2
Line x1,y1,x3,y3
Line x3,y3,x2,y2
DrawScreen
Forever