"LineTest" , V.1.3 !!!!!! - neues beispiel
Übersicht

![]() |
BmsBetreff: "LineTest" , V.1.3 !!!!!! - neues beispiel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hy. Wollt nen gegner mit laser machen. der soll aber nicht durch hindernisse hindurch zielen können. da hab ich die funktion geschrieben:
sie geht alle Punkte zwischen zwischen zwei punkten ab und testet, ob die angegebene Farbe vorkommt. Wenn ja, liefert sie 1, ansonsten 0. startx=x-pos1 starty=y-pos1 endx=x-pos2 endy=y-pos2 >halt wie bei "line" der parameter "farbe" ist halt die farbe als zahl. rot ist(dezimal) -65536 weil bei mir geht nie: if readpixel(x,y)=$FF0000 warum, keine ahnung. vielleicht liegts ja an was andrem. naja. egal. so. hier gleich mit Bsp.: BlitzBasic: [AUSKLAPPEN]
schon lang, gell. davor wollt ichs erst mit BlitzBasic: [AUSKLAPPEN]
machen und richtung1(und richtung2 für y)als Step machen. aber: 00000000000000000000000000000000 0000 step value must be constant 0000 00000000000000000000000000000000 |
||
- Zuletzt bearbeitet von Bms am Sa, Nov 20, 2004 13:52, insgesamt 5-mal bearbeitet
![]() |
sbrog |
![]() Antworten mit Zitat ![]() |
---|---|---|
steps kannst du doch auch in der schleife verändern
stepmanuell =2 for i = 0 to 5 step 1 i = 0+ stepmanuell stepmanuell = stepmanuell +1 next |
||
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: weil bei mir geht nie: if readpixel(x,y)=$FF0000 warum, keine ahnung. vielleicht liegts ja an was andrem. naja. egal. In der Onlinehilfe steht, dass es noch Alpha Pixel hat, vornedran, und deshalb müsstest du so abfragen: if ReadPixel(x,y)=$FFFF0000 ![]() |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
kann man diese Routine eigentlich auch in "Realtime" nutzen,also ist sie schnell genug in einem z.b. 2D-Shooter einzubauen? | ||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
Bms |
![]() Antworten mit Zitat ![]() |
---|---|---|
@simi: danke, hab ich völlig verpennt
@rambo256: glaub, schon. sind ja nur for-next-schleifen, ein paar if-abfragen und readpixel(bzw. readpixelfast wenns braucht). so langsam müsste das eigentlich nicht sein. mal testen... [edit] man könnte sonst noch zur not die steps "hochdrehn". der gegner soll ja nicht perfekt zielen können, wär ja langweilig. allgemein würde ich aber das zielen nur z.B. 3x pro Sekunde machen. sonst wärs zu fies, wenn dich die ganze zeit so n zieler verfolgt. oder den treffer noch mit [syntax="bb":1:5334ca9b41] trefferx=trefferx+rand(-15,15) treffery=treffery+rand(-15,15) [/syntax:1:5334ca9b41] verändern. |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja,k
Aber ich möchte das nicht nur zum zielen verwenden (Hab da schon so etwas ähnliches nur komplexer und mit levelaufstieg usw. ),sondern auch für das Sichtfeld eines Gegners auf einer Tile-map. Werde es mal ausprobieren,wenn ich soweit bin. |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
Bms |
![]() Antworten mit Zitat ![]() |
---|---|---|
oh noch was: am besten 24- oder 32-bit modus verwenden. sonst kommt es zu fehlergebnissen, weil es manche farben im 16bit modus garnicht gibt.
ich versuch mal, so n prog zu schreiben, das alle farben im 16bit-modus testet, ob es sie gibt. wenn nicht, werden die farbwerte in ne datei geschrieben. dann muss man nur schauen, ob die "hindernissfarbe"nicht dabei ist. könnte etwas dauern. |
||
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bms, mach es doch nicht so kompliziert: Du schreibst die zu blockierende Farbe an einen Definierten Pixel (0,0 zB) und liesst sie direkt danach wieder aus. Das Ergebnis liefert den im aktuellen Bildschirmmodus gültigen Farbwert. Den merkst du Dir und schwupp- fröhliches Blocken ist angesagt. Funzt auch Spitze beim berühmt-berüchtigten Maskimage-"Bug" (der ja keiner ist...). | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
The Yeti |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich könnte das gut gebrauchen, aber ich glaube, da ist ein Fehler drin (vielleicht vertu ich mich, bin ja noch Anfänger):
Dein Code testet nicht nur die Pixel bei der Linie, sondern in dem Rechteck startx,starty,endx,endy und somit nix weiter als RectsCollide, nur mit Farbprüfung... |
||
![]() |
Bms |
![]() Antworten mit Zitat ![]() |
---|---|---|
hier die verbesserte LineTest-Function(V 1.1 ![]() BlitzBasic: [AUSKLAPPEN]
zusätzlich gibt es noch den parameter "steps". |
||
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download |
![]() |
Bms |
![]() Antworten mit Zitat ![]() |
---|---|---|
und noch besser: der kollisionspunkt wird jetzt auch noch zurückgeliefert:
BlitzBasic: [AUSKLAPPEN]
|
||
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, aber deine Funktion ist simpel gesagt BULLSHIT, da sie in keinster Weise auf die Steigung der Linie zwischen den beiden Geraden eingeht.
Daher beschreibst du einen festen 45°-Winkel zwischen dem Startpunkt und der Koordinate die zuerst mit einer Komponente des Endpunktes übereinstimmt und ab dann wahlweise eine Lot- oder eine Waagerechte. Es findet also KEINE direkte "Sichtprüfung" statt. Abhilfe schafft eine Verhältnisbestimmung zwischen Höhen- und Breitendifferenz (=Steigung) welche dann als "step"-Verhältnis dient. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Bms |
![]() Antworten mit Zitat ![]() |
---|---|---|
nun die verbesserte version (schon v.1.2). zum zeigen, wo er überprüft werden die zu überprüfenden punkte noch mit plot angezeigt(falls ihr linetest verwendet, plot auskommentieren oder löschen!!).der endpunkt ist mousex(),mousey(). hier ist es:
BlitzBasic: [AUSKLAPPEN]
jetzt ist es aber kein BULLSHIT mehr, bladerunner. |
||
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry wenn ich dir auf den Schlips getreten bin, aber ich muss es auch schon wieder tun:
-Die Line mit der du testest schlägt Haken, also ist die Abfrage ungenau (ein Pixel Verschiebung kann schon den Unterschied zwischen richtig und falsch erkannter Kollision ausmachen). Hierzu ein Screenie: Wie Du siehst ist der Abstand zwischen den Punkten unterschiedlich groß und es ist keine Strecke die du bildest (nicht alle Punkte liegen auf einer Linie). - Die Funktion übergibt bei mir (mit den eingestellten Werten) nie einen Wert zurück weil die passende Abfrage dazu nie erreicht wird (ich habs mit einem eingefügten Printbefehl überprüft) Also meldet sie ja gar keine Kollision und erfüllt somit ihren Zweck (in deinem Beispiel) nicht. Erst nachdem ich das Alphabyte bei Farbe mit eingerechnet habe ging die Funktion - hier wäre es ratsamer gewesen ein funktionierendes Beispiel beizulegen ODER in der Funktion mit AND das Alphabyte zu maskieren. Das Codearchiv ist eigentlich für getestete und funktionsfähige Codeschnipsel gedacht, du solltest deine Codes also etwas besser prüfen bevor du sie postest. Es wäre schade wenn an sich gute Ideen untergehen weil die Leute die es brauchen könnten nach der dritten fehlerhaften Version entnervt aufgeben. Gruß BladeRunner |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Bms |
![]() Antworten mit Zitat ![]() |
---|---|---|
so zufrieden?
BlitzBasic: [AUSKLAPPEN]
grüner punkt = aktuelle mausposition blauer punkt = kollisionspunkt (falls kollision) |
||
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sehr schön ![]() Bei geringen "Steps" ragt der gefundene Kollipunkt etwas in die Fläche rein, aber das ist nit dramatisch (perfekt wäre natürlich wenn die Funktion bei erfolgter Kollisionserkennung zwischen den letzten beiden Punkten nach der "exakten" Grenze sucht.). Insgesamt nun aber eine rundweg brauchbare Sache. Gl´unsch dazu von mir ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Bms |
![]() Antworten mit Zitat ![]() |
---|---|---|
neues beispiel:
BlitzBasic: [AUSKLAPPEN]
mit einem mausklick kann man der "figur"(lilaner kreis) einen neuen waypoint geben. falls keine wegpunkte mehr aktiviert sind, rudert er n bissl verrückt herum und zeigt auf alle unaktivierten punkte(*lutvl*). leider funktionieren nicht alle punkte(beweis: den 1.waypoint an den oberen rand setzen: er sieht ihn nicht). die zahl in der mitte sind die fps. |
||
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Cooles Ding! Aber wenn du richtige Waypoints machst, würde ich den Waypoint einfach löschen wenn zwischen ihm und dem vorherigen keine direkte Verbindung bestehen kann.
Aber sonst Linetest technisch sehr schön, finde ich. ![]() |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
eXceptION |
![]() Antworten mit Zitat ![]() |
---|---|---|
suche "Brezenham's Line Algorithm" bei google...
vielleicht ist da was zum lernen?! ![]() |
||
Norweger...
Spreche aber verdammt gut 8086 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group