dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Lode
Goto page 1, 2  Next
 
dev.gamez.lv Forum Index -> Iesācējiem
View previous topic :: View next topic  
Author Message
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: 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ā Smile . Šī 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 Sad .

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
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: 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 Smile , bet kāda tur bija tā komanda lai uzzīmēt līniju lineto(), vai kā, piemirsās.
_________________
Back to top
View user's profile
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: 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 Confused. 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. Rolling Eyes Sad
_________________
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: 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 Sad
_________________
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: 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 Smile
_________________
Back to top
View user's profile
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: 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.
Sad
_________________
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: 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
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: 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
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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 :=
Code:
a := b;

Tas mainīgajā a iekopēs mainīgā b vērtību.
Back to top
View user's profile Send e-mail
^suny^



Joined: 30 Nov 2007
Posts: 57

PostPosted: Tue Feb 17, 2009 4:01 pm    Post subject:

Jā par mainīgajiem, es vēlak apjēdzu Smile. 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
View user's profile
Display posts from previous:   
dev.gamez.lv Forum Index -> Iesācējiem All times are GMT + 2 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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