|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
^suny^
Joined: 30 Nov 2007 Posts: 57
|
Posted: Sun Feb 01, 2009 10:51 pm Post subject: Lode |
|
Sveiki, esmu iedomājies par vēlvienas nelielas spēlītes uztaisīšanas, lai palielinātu savas prasmes programmēšanā . Šī spēlīte bija domāta veidot kā tankus, tikai šaut varēs kā gribi. Tas domāts tā: no tā zīmējuma(pieņemsim, ka tas ir tanks vai karavīrs) tiks uzzīmēts ierocis, kuru varēs grozīt ar peles palīdzību visos 360 grādos. No ieročā beigām(tā daļa ar kuru vīņš šauj) būs uzzīmēts 'spraits', kurš lidos līdz peles norādītajam punktam (kad nospied).
Visi zīmējumi tiek zīmēti ar BitBlt(); funkciju. Vienīgā ideja kura man ienāk prātā ir : no ieročā gala līdz peles pozīcijai uz bufera tiek zīmēts taisnstūris, pēc formulas tiek aprēķināta taisnstūra diagonāle, zīmējumam likt kustēties pa diagonāli kamēr vinš nesaskaras ar objektu.
Varbūt ir kādi labāki varianti kā to var vieglāk uztaisīt, jo citus variantus es nezinu .
Iespējams laika gaitā parādīsies arī vēl jautājumi. Ja kaut, kas nav saprotams droši jautājiet :)
http://yy.lv/download.php?f=20025 _________________
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Feb 01, 2009 11:12 pm Post subject: |
|
Nesapratu, ko tavā programmā jādara. Neko tur īsti nevarēju izdarīt (man pie tam uz laptopa 1280x800 tavs spēles logs neielīda ekrānā).
Par to lodes šaušanu - domā vajag taisnstūri zīmēt? Man jau šķiet, ka pietiktos ar taisnu līniju - no ieroča līdz peles koordinātēm. Un tad, kad izdomā šaut (ātruma virzienu), tad aprēķini kādā leņķī jālido lodei, pieglabā sākuma koordinātes, un tad jau lodes pozīciju vari aprēķināt jebkurā brīdī ar vienkāršu pamatskolas fizikas formulu: s = s0 + v*t, kur s0 = sākuma pozīčija, v - ātruma vektors, t - laiks, s - lodes pozīcija laika brīdī t. |
|
Back to top |
|
|
^suny^
Joined: 30 Nov 2007 Posts: 57
|
Posted: Mon Feb 02, 2009 5:42 pm Post subject: |
|
Es vēl nezinu pat kā uztaisīt fullscreen u.c lietas, kas ir saistītas ar rezolūciju.
Par lodi paldies , bet kāda tur bija tā komanda lai uzzīmēt līniju lineto(), vai kā, piemirsās. _________________
|
|
Back to top |
|
|
^suny^
Joined: 30 Nov 2007 Posts: 57
|
Posted: Fri Feb 13, 2009 8:58 pm Post subject: |
|
Zināms soliz uz priekšu jau ir, bet vienalga kaut kas nedarbojas, varbūt to ko tu man teici nevar savienot ar BitBlt . Tātad šis ir vienīgais ko es izdomāju, pagaidām Code: | begin
Buffer.Canvas.Pen.Mode:=pmXOR;
Buffer.Canvas.MoveTo(PlayerX+15, PlayerY+5);
TileX:=PlayerX+15; TileY:=PlayerY+5;
Buffer.Canvas.LineTo(X, Y);
PelletEndX:=X; PelletEndY:=Y;
if Button=mbLeft then
begin
for i:=TileX and TileY to PelletEndX and PelletEndY do
BitBlt(Buffer.Canvas.Handle,
PelletEndX, PelletEndY,
10,10,
PelletMask.Canvas.Handle,
0,0,
SRCPAINT);
BitBlt(Buffer.Canvas.Handle,
PelletEndX-15, PelletEndY-15,
32, 32,
Pellet.Canvas.Handle,
0,0,
SRCAND);
end;
end; |
Dotais kods uzzīmē lodi tieši uz peles X un Y , tas ir pašsaprotami, jo BitBlt vajag norādīt x un y. DIemžēl es nezinu kā programmai pateikt, lai viņa zīmē no TileX līdz PelletEndX un TileY līdz PelletEndY. _________________
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Feb 13, 2009 9:13 pm Post subject: |
|
Tu līniju tur gribi uzzīmēt? Tad nevajag nekādu BitBlt lietot. Canvas.Line jālieto. |
|
Back to top |
|
|
^suny^
Joined: 30 Nov 2007 Posts: 57
|
Posted: Sat Feb 14, 2009 12:51 pm Post subject: |
|
Emmm līnija jau ir uzzīmēta, BitBlt lietoju lai zīmētu bitmapus, es nevaru nekādi izdomāt, lai bitmaps kustās pa līniju, nevis parādās jau līnijas beigās _________________
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sat Feb 14, 2009 1:01 pm Post subject: |
|
Nu tad tev vajag atkarībā no laika mainīt bitmapa koordinātes (pamatskolas fizika - s = s0 + v*t)
Code: |
// sākumā inicializē šos mainīgos
deltaX = (x1 - x0) / cik_sekundēs_jākustas_no_sākuma_līdz_beigām
deltaY = (y1 - y0) / cik_sekundēs_jākustas_no_sākuma_līdz_beigām
// spēles zīmēšanas ciklā, kas periodiski izsaucas
x = x0 + deltaX * pagājušais_laiks_sekundēs
y = y0 + deltaY * pagājušais_laiks_sekundēs
ZīmētBitmapu(x, y, bitmaps) |
|
|
Back to top |
|
|
^suny^
Joined: 30 Nov 2007 Posts: 57
|
Posted: Sat Feb 14, 2009 2:23 pm Post subject: |
|
Hmm.. kaut ko līdzīgu esmu redzējis, animācijās ar bumbu kur viņa atsitas pret formas malām un aprēķina lenķi, paldies vēlreiz, ceru, ka tagad viss sanāks _________________
|
|
Back to top |
|
|
^suny^
Joined: 30 Nov 2007 Posts: 57
|
Posted: Mon Feb 16, 2009 6:05 pm Post subject: |
|
Diemžēl, es nesaprotu kāpēc, programma neņem vērā tās sekundes. Lai vai nu kā iznākums ir tāds pats, proti, programma zīmē lodi tikai kursora beigās (X, Y).
Iespējams? :
1) Programma 'neapdeito' X,Y pozīcijas ?
2) Programma zīmē lodes 'ceļu' pārāk ātri, ka to acs nevar redzēt?
2) Cita problēma?
http://yy.lv/download.php?f=23291
Šaja, nedaudz uzlabotā variantā, ir noņemtas smiltis, lai varētu redzēt uz bufera līniju, un lodi.
_________________
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Feb 16, 2009 6:28 pm Post subject: |
|
^suny^ wrote: | Iespējams? :
1) Programma 'neapdeito' X,Y pozīcijas ?
2) Programma zīmē lodes 'ceļu' pārāk ātri, ka to acs nevar redzēt?
2) Cita problēma? |
To neviens cits bez tevis nezinās - tavs programmas kods, ne mūsu. |
|
Back to top |
|
|
^suny^
Joined: 30 Nov 2007 Posts: 57
|
Posted: Mon Feb 16, 2009 6:58 pm Post subject: |
|
Vai ir iespējams kaut kādi pārbaudīt - vai kāda no šīm problēmām ir realitāte? _________________
|
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Mon Feb 16, 2009 7:16 pm Post subject: |
|
Uzmanīgi (un pat vēl uzmanīgāk) lasot kodu vai iedodot mums (vai citiem programmētājiem) apskatīt. |
|
Back to top |
|
|
^suny^
Joined: 30 Nov 2007 Posts: 57
|
Posted: Mon Feb 16, 2009 7:30 pm Post subject: |
|
http://yy.lv/download.php?f=23307
.PAS fails
Iespējams, ka viņš vispār nezīmē tos Peletus pa visu līniju, jo tas kods stāv FormMouseDown(KadTiekNospiestaPele), nevis Timerī, kurš izpilda noteiktu procedūru, noteiktā intervālā.
Ja ta?
Rodas jautājums : DrawTimer nevar uztaisīt doto lietu Code: | if Button=mbLeft then BitBlt(handle,X,Y,.,.,.,.,.); |
Jo (Button, X,Y) ir definēti kā lokālie FormMouseDown mainīgie. Ir iespējams kaut kā nokopēt datus no lokālajiem un iekopēt tos globālajos? _________________
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Feb 17, 2009 8:43 am Post subject: |
|
Nu tu jau tajā MouseDown funkcijā nelieto nekādu laiku. Tu vienkārši ņem un uzzīmē to savu lodi pa visu līniju, beigās atstājot to beigu punktā.
Vajag kodu veidot atkarībā no laika (taimera funkcijā vai idle funkcijā).
Un jā, mainīgos var kopēt. Paskālā tam domāts piešķiršanas operators :=
Tas mainīgajā a iekopēs mainīgā b vērtību. |
|
Back to top |
|
|
^suny^
Joined: 30 Nov 2007 Posts: 57
|
Posted: Tue Feb 17, 2009 4:01 pm Post subject: |
|
Jā par mainīgajiem, es vēlak apjēdzu . Kā panākt, lai programma zīmēt pa visu līniju? Programma vienkārši dabū to beigu punktu un ieliek zīmējumu tur. _________________
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|