Autor Beitrag
Pdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7
BeitragVerfasst: So 02.01.05 14:52 
HI @all

Ich habe ein in den letzten tagen mal wieder zeit gehabt und hab n kleines spiel progr. Das ist mittlerweile bnoch ohne sound und ist nur(fast nur) aus images zusammengesetzt! Es ahndelt sich um ein kleines Autorennen. Ich habe eine fortschritts anzeige integriert die per canvas anzeigt wer mittlerweile weiter gefahren ist!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var Fortschrittsp1,Fortschrittsp2:integer; 
canvas.MoveTo(280,624);
canvas.LineTo(344,Fortschrittsp1);
canvas.MoveTo(408,624);
canvas.LineTo(344,Fortschrittsp2);
So :lol:
Aber jetzt das problem: wenn das rennen gefahren ist, soll diese anzeige wieder gelöscht werden(dh. das komplette canvas , was gezeichnet wurde, soll gelöscht werden) gibts da irgendeinen befehl?? :(

Danke

Pdd

Oh.. :oops: fals euch das noh hilft ich habe nähmlich die rennbahn komplett mit canvas gezeichnet, da ich noch nicht lange mit delphi arbeite und das gerade übe!
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
warten.visible:=true;
canvas.Pen.Color:=clblack;
spiel.Canvas.MoveTo(0,0);
spiel.Canvas.LineTo(0,700);
sleep(100);
spiel.Canvas.MoveTo(1,0);
spiel.Canvas.LineTo(1,700);
sleep(100);
spiel.Canvas.MoveTo(2,0);
spiel.Canvas.LineTo(2,700);
sleep(100);
spiel.Canvas.MoveTo(3,0);
spiel.Canvas.LineTo(3,700);
sleep(100);
spiel.Canvas.MoveTo(4,0);
spiel.Canvas.LineTo(4,700);
sleep(300);

spiel.Canvas.MoveTo(100,0);
spiel.Canvas.LineTo(100,700);
sleep(100);
spiel.Canvas.MoveTo(101,0);
spiel.Canvas.LineTo(101,700);
sleep(100);
spiel.Canvas.MoveTo(102,0);
spiel.Canvas.LineTo(102,700);
sleep(100);
spiel.Canvas.MoveTo(103,0);
spiel.Canvas.LineTo(103,700);
sleep(100);
spiel.Canvas.MoveTo(104,0);
spiel.Canvas.LineTo(104,700);
sleep(300);

spiel.Canvas.MoveTo(200,0);
spiel.Canvas.LineTo(200,700);
sleep(100);
spiel.Canvas.MoveTo(201,0);
spiel.Canvas.LineTo(201,700);
sleep(100);
spiel.Canvas.MoveTo(202,0);
spiel.Canvas.LineTo(202,700);
sleep(100);
spiel.Canvas.MoveTo(203,0);
spiel.Canvas.LineTo(203,700);
sleep(100);
spiel.Canvas.MoveTo(204,0);
spiel.Canvas.LineTo(204,700);
sleep(300);

canvas.MoveTo(0,20);
canvas.LineTo(200,20);
sleep(100);
canvas.MoveTo(0,21);
canvas.LineTo(200,21);
sleep(100);
canvas.MoveTo(0,22);
canvas.LineTo(200,22);
sleep(100);
canvas.MoveTo(0,23);
canvas.LineTo(200,23);
sleep(100);
canvas.MoveTo(0,24);
canvas.LineTo(200,24);
sleep(300);



canvas.MoveTo(0,700);
canvas.lineto(200,700);
sleep(100);
canvas.MoveTo(0,701);
canvas.lineto(200,701);
sleep(100);
canvas.MoveTo(0,702);
canvas.lineto(200,702);
sleep(100);
canvas.MoveTo(0,703);
canvas.lineto(200,703);
sleep(100);
canvas.MoveTo(0,704);
canvas.lineto(200,704);
sleep(100);
sleep(300);
canvas.TextOut(7,5,'Ziel '+name1.text);
sleep(300);
canvas.TextOut(107,5,'Ziel '+name2.text);
canvas.MoveTo(456,704);

canvas.lineto(456,664);
sleep(100);
canvas.MoveTo(457,704);
canvas.lineto(457,664);
sleep(100);
canvas.MoveTo(458,704);
canvas.lineto(458,664);
sleep(100);
canvas.MoveTo(459,704);
canvas.lineto(459,664);
sleep(300);

canvas.MoveTo(459,664);
canvas.LineTo(216,664);
sleep(100);
canvas.MoveTo(459,665);
canvas.LineTo(216,665);
sleep(100);
canvas.MoveTo(459,666);
canvas.LineTo(216,666);
sleep(100);
canvas.MoveTo(459,667);
canvas.LineTo(216,667);

sleep(300);
canvas.MoveTo(217,667);
canvas.LineTo(217,705);
sleep(100);
canvas.MoveTo(218,667);
canvas.LineTo(218,705);
sleep(100);
canvas.MoveTo(219,667);
canvas.LineTo(219,705);
sleep(100);
canvas.MoveTo(220,667);
canvas.LineTo(220,705);
sleep(300);

canvas.MoveTo(221,704);
canvas.lineto(456,704);
sleep(100);
canvas.MoveTo(221,703);
canvas.lineto(456,703);
sleep(100);
canvas.MoveTo(221,702);
canvas.lineto(456,702);
sleep(100);
canvas.MoveTo(221,701);
canvas.lineto(456,701);
sleep(300);
canvas.pen.color:=clwhite;
canvas.moveto(280,418);
canvas.lineto(408,418);
sleep(300);
canvas.TextOut(330,405,'ZIEL');
canvas.Pen.color:=clyellow;
canvas.MoveTo(344,624);
canvas.LineTo(344,418);                       
info.visible:=true;
groupbox1.Visible:=false;
warten.visible:=false;
left.enabled:=true;

_________________
Wenn alles steht und nix mehr looft, denn isses was von Meikrosooft
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 02.01.05 15:24 
Was hast du denn da getippt? :nut: :nut: :nut:
Sowas ist mir ja noch nie untergekommen ... omg ^^

Versuchs ma mit Canvas.Refresh;
Basti
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 345

Windows Vista
D2005 Pers, D7 Pers
BeitragVerfasst: So 02.01.05 15:25 
Also Canvas löschen fällt mir gerade nix ein, aber wie wäre es mit übermalen?
Auf'm Papier sieht sowas dumm aus, aber aufm PC geht's.
Einfach die selbern stellen mit der Farbe clBtnFace übermalen.

Zu deiner Rennstrecke:
Das sieht ziemlich umständlich aus, vor allem, wenn du später mal verschiedene
Strecken hast.
Am besten nimmst du dir einen Array und speicherst da für beide Streckenbegrenzungen
die Eckpunkte (Delphi Hilfe: TPoint, dynamischer Array).
Anschließend bastelst du dir eine Prozedur, die einen Anfangspunkt aus dem Array nimmt.
Du gehst mit MoveTo zu diesem Punkt und Zeichnest ine Linie zu dem nächsten Punkt.
Dann gehst du zu dem Punkt und zeichnest zum nächsten usw...
Du erkennst sicher das das eine Schleife ist.
Also gehst du alle Elemente des Arrays durch (Delphi Hilfe: For-To-Do Schleife, high())
und gehst als erstes zu dem jeweiligen Punkt und danach zeichnest du die Linie vom jeweiligen
Punkt zum nächsten.
Das machst du für linke und rechte Begrenzung und dann hast du es.

Ich hoffe das war einigermaßen hilfreich und verständlich :)
Ich habe zwar keine andere Möglichkeit vorzuschlagen, aber in Sachen Streckenkollision wirst
du da bestimmt Probleme bekommen :(
Aber versuch's erstmal bis dahin :)

_________________
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: So 02.01.05 15:35 
1. Ist das schwer dein Text zu lesen. Wo ist das Problem sich den Text ein zweites mal durchzulesen und die Fehler zu beseitigen? Du erwartest doch, daß sich einer die Mühe macht und dir hilft? Dafür muß er sich Zeit nehmen. Wieso nimmst du dir auch nicht die Zeit für eine Korrekturlesung?

2. Was man über Canvas zeichnet ist fest drauf. Das ist genauso als ob man einer Variable ein Wert zuweist. Der Wert ist jetzt in der Variable. Du kannst sie löschen, aber nicht den alten Wert wiederherstellen. Das gleiche ist mit Canvas. Was du gezeichnet hast ist da. Du kanst höchstens den Bereich löschen. Da gibt es zwar die FillRect Methode, du kanst es aber auch mit einem gefüllten Rechteck überzeichnen. Ist das gleiche. Das beste ist aber sich den gewünschen Bereich vorher in einem Bitmap zu sichern und später wieder drüberzeichen. Das ist eigentlich die einzige richtige Methode.

Das wars. Und wenn du Rückfragen hast, dann bitte ein mal korrektulesen. Sonst gibt's keine Antwort ;)

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(