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

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: Sa 01.04.06 22:10 
Hi Leute,

Erst einmal möchte ich sagen, dass ich noch ziehmlich neu hier bin und auch noch nicht sehr erfahren bin, was die Programmierung angeht.
Zu meinem Programm: Ich habe mal versucht ein simples Programm zu schreiben, das die Gravitation simuliert. Das habe ich durch zwei Geschwindigkeiten (horizontal und vertikal) gelößt, die ich unabhänig voneinander betrachte. Auf die Vertikalkomponente wirkt noch dazu die Gravitation. Aber schaut doch am besten selbst. :zwinker:
Zur Visualisierung zeichne ich einen Kreis mit Canvas, den man mit der Maus aufnehmen und herumschleudern kann.
Allerdings habe ich noch einige Probleme in Bezug auf die Simulierung der Reibung:
Schaltet man sie aus springt der Ball immer höher obwohl er eigentlich immer auf die Maximalhöhe kommen sollte. Und ich finde den Fehler nicht. :bawling: Bitte kann mir da jemand helfen.
Weitere Bugs:
-prallt der Ball an der rechten Seite ab scheint er schneller zu werden
-die horizontale Reibung wirkt bei niedrigen Geschwindikeiten zu abruppt und der Ball hat dann plötzlich keine Horizontalbewegung mehr

Ich hoffe ihr könnt mir da ein bisschen helfen. :roll:


Moderiert von user profile iconGausi: Topic aus Freeware Projekte verschoben am So 02.04.2006 um 14:23
LonghornUser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Sa 01.04.06 23:39 
Ich kann dir zwar bei deinem Problem net helfen, muss aber sagen, dass mir das Programm echt gut gefällt. Kompliment :) Vor allem mit wie wenig Code man sowas hinbekommen kann. Net schlecht :)
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 01.04.06 23:45 
und noch ein bug:

hält man den ball direkt unter der leiste des programmes un lässt ihn anschließend los, so bleibt er dort hängen ;)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 02.04.06 00:32 
Hallo!

user profile iconcuejo hat folgendes geschrieben:
Allerdings habe ich noch einige Probleme in Bezug auf die Simulierung der Reibung: [...] Bitte kann mir da jemand helfen. [...] Ich hoffe ihr könnt mir da ein bisschen helfen. :roll:

Ich möchte nur mal kurz drauf hinweisen, dass in den Thread der Freeware-Sparte bitte nicht die Programmierprobleme besprochen werden. Dafür bitte Threads in den Programmiersparten erstellen! Danke! :-)

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 02.04.06 07:42 
Mir gefällt nicht, dass der Ball, wenn er auf dem Boden liegt, halb aus dem Bild draußen ist (die Show-Tip-Checkbox ist auch nur so halb zu sehen). Außerdem sollte das Programm sofort auf die Änderung des Ortes reagieren (IMHO).

Sonst nicht schlecht!

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 02.04.06 10:10 
ich würde sagen, dass ist eher opensource, deshalb hier ein minimaler vorschlag:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function ball.wall(value:real):real; // Reibung an Bande
begin
  if fri then result:=value*0.8 else result:=value;
end;

du machst ja vert := wall(vert);
also geht das auch so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure ball.wall(var value: real) // Reibung an Bande
begin
  if fri then 
    value := value * 0.8;
end;

dann machst du wall(vert) und fertig ;)

sonst recht gut, außer dass der ball im weltraum an der decke hängenbleibt.
(das liegt an der reibung, vielleicht sollte die dann abgeschaltet werden ;) )
DelphiAnfänger
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 112

Win XP, Firefox 2.0, IE6
Delphi 5 Prof., Delphi 2005 PE
BeitragVerfasst: So 02.04.06 13:45 
kannst du mal die exe datei hochstellen kann die mit Delphi 5 nicht erzeugen
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 02.04.06 14:08 
die exe befindet sich im zipordner :roll:

edit: hab sie hochgeladen ;) vermutlich lag sie nur im meinem ordner vor, weil ich zuvor den code compilert habe :roll:
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Marc. am So 02.04.06 14:55, insgesamt 1-mal bearbeitet
Ironwulf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: So 02.04.06 14:42 
öhm bei mir is die nich in dem ordner
cuejo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: So 02.04.06 21:12 
Danke für die Kritik, Anregungen und natürlich auch fürs Lob :mrgreen:!

user profile iconNoTVerYEvilPzYchO hat folgendes geschrieben:
und noch ein bug:

hält man den ball direkt unter der leiste des programmes un lässt ihn anschließend los, so bleibt er dort hängen

Hab ich behoben. Es lag daran, dass die Kugel immer wieder an die Selbe stelle replaced wurde:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if (posy-r)=(top+1then
  begin
    vert:=wall(vert);
    vert:=-1*vert;   
    posy:=top+r+1;
  end;


user profile iconChristian S. hat folgendes geschrieben:

Ich möchte nur mal kurz drauf hinweisen, dass in den Thread der Freeware-Sparte bitte nicht die Programmierprobleme besprochen werden. Dafür bitte Threads in den Programmiersparten erstellen! Danke! :-)

Grüße
Christian

Ok. Hab ein Thread geöffnet. :)

user profile iconGTA-Place hat folgendes geschrieben:
Mir gefällt nicht, dass der Ball, wenn er auf dem Boden liegt, halb aus dem Bild draußen ist (die Show-Tip-Checkbox ist auch nur so halb zu sehen).

Komisch, so ein Problem hab ich nicht. :shock:

user profile iconGTA-Place hat folgendes geschrieben:
Außerdem sollte das Programm sofort auf die Änderung des Ortes reagieren (IMHO).

Wie meinst du das?


user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
ich würde sagen, dass ist eher opensource, deshalb hier ein minimaler vorschlag:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function ball.wall(value:real):real; // Reibung an Bande
begin
  if fri then result:=value*0.8 else result:=value;
end;

du machst ja vert := wall(vert);
also geht das auch so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure ball.wall(var value: real) // Reibung an Bande
begin
  if fri then 
    value := value * 0.8;
end;

dann machst du wall(vert) und fertig ;)

Ja, klar das kann man machen. Es wäre aber nur eine Formalität, oder bringt das irgentwelche Vorteile? :nixweiss:

user profile iconDelphiAnfänger hat folgendes geschrieben:
kannst du mal die exe datei hochstellen kann die mit Delphi 5 nicht erzeugen

Hab ich. Hier die neue Version ohne an-der-Deke-hängenbleib:
Einloggen, um Attachments anzusehen!
wunsiedler
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 506
Erhaltene Danke: 4

Win7

BeitragVerfasst: So 02.04.06 21:14 
Bei mir a net. Hätts gern mal ausprobiert.

EDIT

Augen auf, da isses ja :-)
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 03.04.06 19:16 
Das eine hat sich erledigt, funktioniert jetzt (war selbe Fehler wie hängen bleiben) und das andere Problem hab ich bei XP-Style hier. Bissl flimmern tut's auch.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mo 03.04.06 19:46 
der vorteil liegt in der performance, das merkst du aber erst wenn du versuchst 1000000 bälle zu bewegen ^^
cuejo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: Mo 03.04.06 21:49 
ok, gut das ich das nicht vor habe :zwinker:
cuejo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: Di 04.04.06 22:39 
So die neue Version ist fertig:

fixed Bugs:
  • Die Kugel spring jetzt ohne Reibung mehr oder weniger gleich hoch.
    Sie flackert auch nicht mehr (benutze kreisförmiges Shape zur Darstellung).
    Animation ist jetzt viel flüssiger.Kugel wird auch nicht mehr schneller, wenn sie an der rechten Bande abprallt.


Big THX an user profile iconSimon Joker. Er hat mir die Augen geöffnet... :D

added Features:
  • Man kann jetzt Reibung an Wand und Luftwiderstand seperat ein/ausschalten.
    Radius kann verändert werden.
    Man kann entscheiden ob man die Kugel mit der Maus "fangen" will oder ob sie zur Maus "springt"


Allerdings gibts jetzt einen kleinen Schönheitsfehler :( : Die Kugel zittert, wenn sie am Boden liegt. Wer mir helfen will kann das hier machen.
Einloggen, um Attachments anzusehen!
Zyklame
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41
Erhaltene Danke: 1

Win 7 Professional
Delphi XE, Visual Studio 2010
BeitragVerfasst: Mi 05.04.06 11:42 
Zitat:
Sie flackert auch nicht mehr (benutze kreisförmiges Shape zur Darstellung)

Wenn das shape größer ist flackert es und zwar ziemlich stark.

Eine möglichkeit wäre es die Kugel (als Bild und nicht als Shape) mit der win API Funktion
BitBlt auf der Form zu verschieben
siehe www.dsdt.info/tipps/?id=348
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 05.04.06 12:02 
oder du verwendest double buffering

der ball hört aber irgendwie nicht auf zu hüpfen :?
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Do 06.04.06 19:49 
Wenn du die Reibung abstellst ist klar, dass er nicht aufhört zu hüpfen. Sonst mit Reibung ist es nur der Bug, den cuejo angesprochen hat.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
cuejo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: Do 06.04.06 20:53 
Hab jetzt geschafft das zittern mithilfe einer genaueren Kollisionsabfrage zu unterbinden. Nun ja unter seltenen umständen kanns immer noch zittern, aber dann längst nicht mehr so extrem wie es sonst der fall war.
Sobald ich noch das flackern abgestellt habe werde ich die neue Version hochladen. Doch das bereitet mir noch ziehmiches Kopfzerbrechen. BitBlt() scheint in meiner Delphi Version irgendwie nicht zu funktionieren, oder ich bin einfach nur zu doof dazu. :roll: Ich hab schon herumexperimentiert, die Kugel in ein TBitmap zu zeichnen und anschließend in einem Image auszugeben, aber das hab ich nicht hinbekommen... :oops:
Doublebuffering klappt prima (das hab selbst ich hinbekommen :lol: ), aber dann werden alle checkboxes usw. schwarz wenn man mit der maus drüberfährt... :?:
Wäre sehr dankbar wenn mir irgendjemand zu diesem Thema ein Link zu einem Tutorial oder ähnichem posten kann (ich hab schon gesucht aber nix gescheites gefunden).
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: Do 06.04.06 21:17 
Ich hab in deinen Code mal ein "manuelles" DoubleBuffering eingebaut.
Jetzt sollte alles (bis aufs Vergrößern) Flackerfrei laufen :roll:
Einloggen, um Attachments anzusehen!