<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914984</guid>
        <pubDate>Mon, 16 Dec 2024 10:05:59 +0000</pubDate>
        <title>Как сделать перемещения корабля с помощью кнопок клавиатуры?</title>
        <link>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914984</link>
        <description><![CDATA[macomics: Так. Вы по таймеру вызываете mtx.backup(power); и mtx.proceed(power);<br>Они устанавливают переменную скорость у объекта. Поэтому просто установив кнопку в false вы не обнуляете скорость. Если хотите остановить объект вызовите mtx.setSpeed(0);<br>Но для этого выделите скажем кнопку backspace иначе у вас объект потеряет инерцию движения.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914983</guid>
        <pubDate>Mon, 16 Dec 2024 09:40:59 +0000</pubDate>
        <title>Как сделать перемещения корабля с помощью кнопок клавиатуры?</title>
        <link>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914983</link>
        <description><![CDATA[MBo: Вы поставили у формы KeyPreview? После этого проверьте, что кнопки отлавливаются (например, в обработчиках KeyUp и KeyDown выводите в заголовок код клавиши Key)]]></description>
        <author>MBo</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914982</guid>
        <pubDate>Mon, 16 Dec 2024 09:30:56 +0000</pubDate>
        <title>Как сделать перемещения корабля с помощью кнопок клавиатуры?</title>
        <link>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914982</link>
        <description><![CDATA[Katerina1993: Причём тут обработчик ListBox и Form это вообще никак не влияет корабль будет двигаться бесконечно не зависимо на что я повещу нажатие кнопок. Я проверала на других языках программирования там тоже самое что и на delphi. Там нет не ListBox, ни Form.]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914721</guid>
        <pubDate>Wed, 11 Dec 2024 12:27:33 +0000</pubDate>
        <title>Как сделать перемещения корабля с помощью кнопок клавиатуры?</title>
        <link>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914721</link>
        <description><![CDATA[macomics: Так вы опять обработчик нажатия ловите у одного объекта (ListBox), а отпускания ждете у другого(Form). Так нельзя. Создайте обработчик отпускания для ListBox&#39;а]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914720</guid>
        <pubDate>Wed, 11 Dec 2024 12:19:26 +0000</pubDate>
        <title>Как сделать перемещения корабля с помощью кнопок клавиатуры?</title>
        <link>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914720</link>
        <description><![CDATA[Katerina1993: Да даже если раскомментировать отпускание кнопок, то ничего не поменяется корабль будет бесконечно двигаться при нажатии. Отпускание кнопок никакую роль не играют.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, ExtCtrls, AppEvnts, StdCtrls,Math;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TPoint1 = record mouseX,mouseY:Currency &nbsp;; end;</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Image1: TImage;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ApplicationEvents1: TApplicationEvents;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label2: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ListBox1: TListBox;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ApplicationEvents1Message(var Msg: tagMSG;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;var Handled: Boolean);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyUp(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ListBox1KeyDown(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TMatrix1 = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;a, b, c,d,tx,ty: Real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;x1,y1:Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;fr:TForm;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bitmap0:TBitmap;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Cs:TCanvas;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; //Новые</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;_xvel,_yvel,_xaccel,_yaccel,_nextx,_nexty,_prevx,_prevy,_maxvel,_spin:Real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;_colliding,_accelerating:Boolean;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_bitmap:TBitmap;_Cs:TCanvas;_fr:TForm;_a, _b,_c,_d, _tx, _ty: Real;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_xvel0,_yvel0,</div><div class="code_line">&nbsp;&nbsp;_xaccel0,_yaccel0,_nextx0,_nexty0,_prevx0,_prevy0,_maxvel0,</div><div class="code_line">&nbsp;&nbsp;_spin0:Real;_colliding0,_accelerating0:Boolean;_x1,_y1:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Procedure Draw(); </div><div class="code_line">&nbsp;&nbsp; &nbsp;function identity ():TMatrix1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function appendTransform (x, y, scaleX, scaleY:Real; rotation:Integer; skewX, skewY, regX, regY:Real):TMatrix1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function append(a2, b2, c2, d2, tx2, ty2:Real):TMatrix1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Procedure proceed(power:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure backup(power:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure applyForce(angle, power:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure setSpeed(speed:Real);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure accelerate();</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure animate();</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;function getDistance(delta_x, delta_y:Real):Real;</div><div class="code_line">&nbsp;&nbsp;function getDegrees(radians:Real):Real;</div><div class="code_line">&nbsp;&nbsp;function getRadians(delta_x, delta_y:Real):Real;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;bmp1: TBitmap;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;rotate1:Integer = 90;</div><div class="code_line">&nbsp;&nbsp;pt:TPoint1;</div><div class="code_line">&nbsp;&nbsp;mtx:TMatrix1;</div><div class="code_line">&nbsp;&nbsp;leftb,rightb,downb,upb : Boolean;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">function getRadians(delta_x, delta_y:Real):Real;</div><div class="code_line">var r:Real;</div><div class="code_line">begin</div><div class="code_line">r:=ArcTan2(delta_y, delta_x);</div><div class="code_line">&nbsp;</div><div class="code_line">if delta_y &#60; 0 then</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;r := r + 6.283;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">Result:=r;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">function getDegrees(radians:Real):Real;</div><div class="code_line">begin</div><div class="code_line">Result:=radians / 0.01745;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">function getDistance(delta_x, delta_y:Real):Real;</div><div class="code_line">begin</div><div class="code_line">Result:=sqrt((delta_x*delta_x)+(delta_y*delta_y));</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TMatrix1.Create(_bitmap:TBitmap;_Cs:TCanvas;_fr:TForm;_a, _b,_c,_d, _tx, _ty: Real;_xvel0,_yvel0,</div><div class="code_line">&nbsp;&nbsp;_xaccel0,_yaccel0,_nextx0,_nexty0,_prevx0,_prevy0,_maxvel0,</div><div class="code_line">&nbsp;&nbsp;_spin0:Real;_colliding0,_accelerating0:Boolean;_x1,_y1:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; inherited Create;</div><div class="code_line">&nbsp;&nbsp; fr:=_fr;</div><div class="code_line">&nbsp;&nbsp; bitmap0:=_bitmap;</div><div class="code_line">&nbsp;&nbsp; Cs:=_Cs;</div><div class="code_line">&nbsp;&nbsp; a:=_a;</div><div class="code_line">&nbsp;&nbsp; b:=_b;</div><div class="code_line">&nbsp;&nbsp; c:=_d;</div><div class="code_line">&nbsp;&nbsp; tx:=_tx;</div><div class="code_line">&nbsp;&nbsp; ty:=_ty;</div><div class="code_line">&nbsp;&nbsp; x1:=_x1;</div><div class="code_line">&nbsp;&nbsp; y1:=_y1;</div><div class="code_line">&nbsp;&nbsp; //Новые переменные</div><div class="code_line">&nbsp;&nbsp; _xvel:=_xvel0;</div><div class="code_line">&nbsp;&nbsp; _yvel:=_yvel0;</div><div class="code_line">&nbsp;&nbsp; _xaccel:=_xaccel0;</div><div class="code_line">&nbsp;&nbsp; _yaccel:=_yaccel0;</div><div class="code_line">&nbsp;&nbsp; _nextx:=_nextx0;</div><div class="code_line">&nbsp;&nbsp; _nexty:=_nexty0;</div><div class="code_line">&nbsp;&nbsp; _prevx:=_prevx0;</div><div class="code_line">&nbsp;&nbsp; _prevy:=_prevy0;</div><div class="code_line">&nbsp;&nbsp; _spin:=_spin0;</div><div class="code_line">&nbsp;&nbsp; _maxvel:=_maxvel0;</div><div class="code_line">&nbsp;&nbsp; _colliding:=_colliding0;</div><div class="code_line">&nbsp;&nbsp; _accelerating:=_accelerating0;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.proceed(power:Integer);</div><div class="code_line">var a,a1,a2:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;a1:=Math.Floor(_xvel*_xvel);</div><div class="code_line">&nbsp;a2:=Math.Floor(_yvel*_yvel);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;a := Sqrt(a1 + a2);</div><div class="code_line">&nbsp;if power = 0 then</div><div class="code_line">&nbsp;&nbsp;power := 2</div><div class="code_line">&nbsp;else</div><div class="code_line">&nbsp;&nbsp;power := Math.Min(2,power);</div><div class="code_line">&nbsp;//if a &#60; _maxvel then</div><div class="code_line">// &nbsp;fireEngine(power, offset);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;setSpeed(_maxvel);</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.backup(power:Integer);</div><div class="code_line">var a,a1,a2:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a1 := Math.Floor(_xvel * _xvel);</div><div class="code_line">&nbsp;&nbsp;a2 := Math.Floor(_yvel * _yvel);</div><div class="code_line">&nbsp;&nbsp;a := Sqrt(a1 + a2);</div><div class="code_line">&nbsp;&nbsp;setSpeed(0 - _maxvel);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.accelerate();</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;_xvel:=_xvel+_xaccel;</div><div class="code_line">&nbsp;&nbsp;_yvel:=_yvel+_yaccel;</div><div class="code_line">&nbsp;&nbsp;_accelerating:=False;</div><div class="code_line">&nbsp;&nbsp;_xaccel:=0;</div><div class="code_line">&nbsp;&nbsp;_yaccel:=0;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.animate();</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; if (Abs(_xvel) &#62;= 0.3) or (Abs(_yvel) &#62;= 0.3) or _accelerating or _colliding then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; _nextx := x1 + _xvel + _xaccel;</div><div class="code_line">&nbsp;&nbsp; &nbsp; _nexty := y1 + _yvel + _yaccel;</div><div class="code_line">&nbsp;&nbsp; &nbsp; if _colliding then</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;_colliding := false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_yaccel := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;_xaccel := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; end</div><div class="code_line">&nbsp;&nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; accelerate();</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_prevx := x1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;_prevy := y1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;x1 := x1 + Math.min(Math.Floor(_maxvel), Math.max(Math.Floor(0 - _maxvel), Math.Floor(_xvel)));</div><div class="code_line">&nbsp;&nbsp; &nbsp;y1 := y1 + Math.min(Math.Floor(_maxvel), Math.max(Math.Floor(0 - _maxvel), Math.Floor(_yvel)));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.Draw();</div><div class="code_line">var HDC2:THandle; M:TXFORM;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; mtx.identity();</div><div class="code_line">&nbsp;&nbsp; mtx.appendTransform(x1, y1, 1, 1, rotate1, 0, 0, 16, 29.5);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; hDc2 := Cs.Handle;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; SetGraphicsMode(hDc2, GM_ADVANCED);</div><div class="code_line">&nbsp;&nbsp; SaveDC(hDc2);</div><div class="code_line">&nbsp;&nbsp; fillChar(M, sizeOf(M), 0);</div><div class="code_line">&nbsp;&nbsp; M.eM11 := mtx.a;</div><div class="code_line">&nbsp;&nbsp; M.eM12 := mtx.b;</div><div class="code_line">&nbsp;&nbsp; M.eM21 := mtx.c;</div><div class="code_line">&nbsp;&nbsp; M.eM22 := mtx.d;</div><div class="code_line">&nbsp;&nbsp; M.eDx := mtx.tx;</div><div class="code_line">&nbsp;&nbsp; M.eDy := mtx.ty;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; ModifyWorldTransform(hDc2, M, MWT_LEFTMULTIPLY);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Cs.Draw(0,0,bitmap0);</div><div class="code_line">&nbsp;&nbsp;RestoreDC(HDC2,1);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.applyForce(angle, power:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.identity():TMatrix1;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a := 1;</div><div class="code_line">&nbsp;&nbsp;d := 1;</div><div class="code_line">&nbsp;&nbsp;b := 0;</div><div class="code_line">&nbsp;&nbsp;c := 0;</div><div class="code_line">&nbsp;&nbsp;tx := 0;</div><div class="code_line">&nbsp;&nbsp;ty := 0;</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.appendTransform(x, y, scaleX, scaleY:Real; rotation:Integer; skewX, skewY, regX, regY:Real):TMatrix1;</div><div class="code_line">var r, cos1, sin1:Real; a1:Integer;</div><div class="code_line">begin</div><div class="code_line">a1:=rotation mod 360;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if a1 &#60; 360 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; r := rotation*PI/180;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; cos1 := cos(r);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; sin1 := sin(r);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cos1 := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;sin1 := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; append(cos1*scaleX, sin1*scaleX, -sin1*scaleY, cos1*scaleY, x, y);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; tx := tx - (regX*a+regY*c);</div><div class="code_line">&nbsp;&nbsp; ty := ty - (regX*b+regY*d);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.append(a2, b2, c2, d2, tx2, ty2:Real):TMatrix1;</div><div class="code_line">var a1,b1,c1,d1:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a1:=a;</div><div class="code_line">&nbsp;&nbsp;b1:=b;</div><div class="code_line">&nbsp;&nbsp;c1:=c;</div><div class="code_line">&nbsp;&nbsp;d1:=d;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (a2 &#60;&#62; 1) or (b2 &#60;&#62; 0) or (c2 &#60;&#62; 0) or (d2 &#60;&#62; 1) then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; a &nbsp;:= a1*a2+c1*b2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; b &nbsp;:= b1*a2+d1*b2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; c &nbsp;:= a1*c2+c1*d2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; d &nbsp;:= b1*c2+d1*d2;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;tx:=a1*tx2+c1*ty2+tx;</div><div class="code_line">&nbsp;&nbsp;ty:=b1*tx2+d1*ty2+ty;</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.setSpeed(speed:Real);</div><div class="code_line">var a:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a := 0.0174532925199 * rotate1;</div><div class="code_line">&nbsp;&nbsp;speed := Math.min(_maxvel, Math.max(speed, 0 - _maxvel));</div><div class="code_line">&nbsp;&nbsp;_xvel := Cos(a) * speed;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_yvel := Sin(a) * speed;</div><div class="code_line">&nbsp;&nbsp;_accelerating := true;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;bmp1 := TBitmap.Create;</div><div class="code_line">&nbsp;&nbsp;bmp1.LoadFromFile(&#39;.\WeaponQuadSkin.bmp&#39;); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;mtx:=TMatrix1.Create(bmp1,Image1.Canvas,Form1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,false,false,225,275);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Timer1.Enabled:=True;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;</div><div class="code_line">&nbsp;&nbsp;var Handled: Boolean);</div><div class="code_line">var P : TPoint;</div><div class="code_line">begin</div><div class="code_line">if Msg.message = WM_MOUSEMOVE then</div><div class="code_line">begin</div><div class="code_line">&nbsp;P:=Image1.ScreenToClient(Mouse.CursorPos);</div><div class="code_line">&nbsp;pt.mouseX := P.X;</div><div class="code_line">&nbsp;pt.mouseY := P.Y;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">var dx1, dy1, _rotateTo:Real;</div><div class="code_line">power:Integer;</div><div class="code_line">_trueRotation:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if rightb = true then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if leftb = true then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if upb = true then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;mtx.backup(power);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if downb = true then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;mtx.proceed(power);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;dx1 := mtx.x1 - pt.mouseX;</div><div class="code_line">&nbsp;&nbsp;dy1 := mtx.y1 - pt.mouseY;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;_rotateTo := getDegrees(getRadians(dx1, dy1));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Form1.Image1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">&nbsp;&nbsp;Form1.Image1.Canvas.FillRect(Form1.Image1.ClientRect);</div><div class="code_line">&nbsp;&nbsp; if rotate1 &#62; 180 then rotate1 := -180;</div><div class="code_line">&nbsp;&nbsp; if rotate1 &#60; -180 then rotate1 := 180;</div><div class="code_line">&nbsp;&nbsp;if _rotateTo &#62; rotate1 + 180 then _rotateTo := _rotateTo - 360;</div><div class="code_line">&nbsp;&nbsp;if _rotateTo &#60; rotate1 - 180 then _rotateTo := _rotateTo + 360;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; _trueRotation := (_rotateTo - rotate1);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; rotate1:=Trunc(rotate1+_trueRotation);</div><div class="code_line">&nbsp;&nbsp;// Label2.Caption:=FloatToStr(rotate1);</div><div class="code_line">&nbsp;&nbsp; mtx.animate;</div><div class="code_line">&nbsp;&nbsp; mtx.Draw();</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">case Key of</div><div class="code_line">//vk_RIGHT: rightb := false;</div><div class="code_line">//vk_LEFT: leftb := false;</div><div class="code_line">vk_UP: upb := false;</div><div class="code_line">vk_DOWN: downb := false;</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">case key of vk_RIGHT: rightb := true;</div><div class="code_line">vk_LEFT: leftb := true;</div><div class="code_line">vk_UP:</div><div class="code_line">begin</div><div class="code_line">upb := true;</div><div class="code_line">//downb := false;</div><div class="code_line">end;</div><div class="code_line">vk_DOWN:</div><div class="code_line">begin</div><div class="code_line">//upb := false;</div><div class="code_line">downb := true;</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914665</guid>
        <pubDate>Wed, 11 Dec 2024 03:10:50 +0000</pubDate>
        <title>Как сделать перемещения корабля с помощью кнопок клавиатуры?</title>
        <link>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914665</link>
        <description><![CDATA[macomics: У вас <span class='tag-u'>нажатие</span> <strong class='tag-b'>procedure</strong> TForm1.<strong class='tag-b'><span class='tag-u'>ListBox1</span></strong>KeyDown, а вот <span class='tag-u'>отпускание</span> вы ловите у <strong class='tag-b'>procedure</strong> TForm1.<strong class='tag-b'><span class='tag-u'>Form</span></strong>KeyUp]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914664</guid>
        <pubDate>Wed, 11 Dec 2024 02:55:39 +0000</pubDate>
        <title>Как сделать перемещения корабля с помощью кнопок клавиатуры?</title>
        <link>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914664</link>
        <description><![CDATA[MBo: А почему у вас в KeyUp закомментирован код, который записывает отжатие кнопок и соответственно снимает состояние движения?]]></description>
        <author>MBo</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914663</guid>
        <pubDate>Wed, 11 Dec 2024 00:28:53 +0000</pubDate>
        <title>Как сделать перемещения корабля с помощью кнопок клавиатуры?</title>
        <link>https://forum.sources.ru/index.php?showtopic=454432&amp;view=findpost&amp;p=3914663</link>
        <description><![CDATA[Katerina1993: Здравствуйте, сделала перемещение корабля с помощью стрелок «вперёд, назад». <br>
<br>
Корабль движется в том направлении в котором находиться мышка, если мышку переместить, то корабль развернётся и полетит в противоположное направление - пример gif-анимации. <br>
<img class='tag-img' src='https://i.ibb.co/mvdMGjd/img1.gif' alt='user posted image'><br>
Проблема заключается в том что не получается остановить корабль, при первом нажатии начинается движение. <br>
<br>
Единственное, что удалось сделать это чтобы можно было изменить движение в зависимости от направлении, если объект летит вперёд, то нажав назад, корабль полетит назад. Если назад то можно направить вперёд.<br>
<br>
Вообщем как сделать чтобы корабль перемещался только от кнопок (стрелок) клавиатуры. Когда пользователь отпускает кнопку, корабль останавливался? Вот пример кода на Delphi7:<br>
<br>
Исходники для скачивания: <a class='tag-url' href='https://disk.yandex.ru/d/8EGNaWHgS3PT4A' target='_blank'>https://disk.yandex.ru/d/8EGNaWHgS3PT4A</a><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, ExtCtrls, AppEvnts, StdCtrls,Math;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TPoint1 = record mouseX,mouseY:Currency &nbsp;; end;</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Image1: TImage;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ApplicationEvents1: TApplicationEvents;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label2: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ListBox1: TListBox;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ApplicationEvents1Message(var Msg: tagMSG;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;var Handled: Boolean);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyUp(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ListBox1KeyDown(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TMatrix1 = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;a, b, c,d,tx,ty: Real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;x1,y1:Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;fr:TForm;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bitmap0:TBitmap;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Cs:TCanvas;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; //Новые</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;_xvel,_yvel,_xaccel,_yaccel,_nextx,_nexty,_prevx,_prevy,_maxvel,_spin:Real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;_colliding,_accelerating:Boolean;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_bitmap:TBitmap;_Cs:TCanvas;_fr:TForm;_a, _b,_c,_d, _tx, _ty: Real;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_xvel0,_yvel0,</div><div class="code_line">&nbsp;&nbsp;_xaccel0,_yaccel0,_nextx0,_nexty0,_prevx0,_prevy0,_maxvel0,</div><div class="code_line">&nbsp;&nbsp;_spin0:Real;_colliding0,_accelerating0:Boolean;_x1,_y1:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Procedure Draw(); </div><div class="code_line">&nbsp;&nbsp; &nbsp;function identity ():TMatrix1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function appendTransform (x, y, scaleX, scaleY:Real; rotation:Integer; skewX, skewY, regX, regY:Real):TMatrix1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function append(a2, b2, c2, d2, tx2, ty2:Real):TMatrix1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Procedure proceed(power:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure backup(power:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure applyForce(angle, power:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure setSpeed(speed:Real);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure accelerate();</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure animate();</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;function getDistance(delta_x, delta_y:Real):Real;</div><div class="code_line">&nbsp;&nbsp;function getDegrees(radians:Real):Real;</div><div class="code_line">&nbsp;&nbsp;function getRadians(delta_x, delta_y:Real):Real;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;bmp1: TBitmap;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;rotate1:Integer = 90;</div><div class="code_line">&nbsp;&nbsp;pt:TPoint1;</div><div class="code_line">&nbsp;&nbsp;mtx:TMatrix1;</div><div class="code_line">&nbsp;&nbsp;leftb,rightb,downb,upb : Boolean;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">function getRadians(delta_x, delta_y:Real):Real;</div><div class="code_line">var r:Real;</div><div class="code_line">begin</div><div class="code_line">r:=ArcTan2(delta_y, delta_x);</div><div class="code_line">&nbsp;</div><div class="code_line">if delta_y &#60; 0 then</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;r := r + 6.283;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">Result:=r;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">function getDegrees(radians:Real):Real;</div><div class="code_line">begin</div><div class="code_line">Result:=radians / 0.01745;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">function getDistance(delta_x, delta_y:Real):Real;</div><div class="code_line">begin</div><div class="code_line">Result:=sqrt((delta_x*delta_x)+(delta_y*delta_y));</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TMatrix1.Create(_bitmap:TBitmap;_Cs:TCanvas;_fr:TForm;_a, _b,_c,_d, _tx, _ty: Real;_xvel0,_yvel0,</div><div class="code_line">&nbsp;&nbsp;_xaccel0,_yaccel0,_nextx0,_nexty0,_prevx0,_prevy0,_maxvel0,</div><div class="code_line">&nbsp;&nbsp;_spin0:Real;_colliding0,_accelerating0:Boolean;_x1,_y1:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; inherited Create;</div><div class="code_line">&nbsp;&nbsp; fr:=_fr;</div><div class="code_line">&nbsp;&nbsp; bitmap0:=_bitmap;</div><div class="code_line">&nbsp;&nbsp; Cs:=_Cs;</div><div class="code_line">&nbsp;&nbsp; a:=_a;</div><div class="code_line">&nbsp;&nbsp; b:=_b;</div><div class="code_line">&nbsp;&nbsp; c:=_d;</div><div class="code_line">&nbsp;&nbsp; tx:=_tx;</div><div class="code_line">&nbsp;&nbsp; ty:=_ty;</div><div class="code_line">&nbsp;&nbsp; x1:=_x1;</div><div class="code_line">&nbsp;&nbsp; y1:=_y1;</div><div class="code_line">&nbsp;&nbsp; //Новые переменные</div><div class="code_line">&nbsp;&nbsp; _xvel:=_xvel0;</div><div class="code_line">&nbsp;&nbsp; _yvel:=_yvel0;</div><div class="code_line">&nbsp;&nbsp; _xaccel:=_xaccel0;</div><div class="code_line">&nbsp;&nbsp; _yaccel:=_yaccel0;</div><div class="code_line">&nbsp;&nbsp; _nextx:=_nextx0;</div><div class="code_line">&nbsp;&nbsp; _nexty:=_nexty0;</div><div class="code_line">&nbsp;&nbsp; _prevx:=_prevx0;</div><div class="code_line">&nbsp;&nbsp; _prevy:=_prevy0;</div><div class="code_line">&nbsp;&nbsp; _spin:=_spin0;</div><div class="code_line">&nbsp;&nbsp; _maxvel:=_maxvel0;</div><div class="code_line">&nbsp;&nbsp; _colliding:=_colliding0;</div><div class="code_line">&nbsp;&nbsp; _accelerating:=_accelerating0;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.proceed(power:Integer);</div><div class="code_line">var a,a1,a2:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;a1:=Math.Floor(_xvel*_xvel);</div><div class="code_line">&nbsp;a2:=Math.Floor(_yvel*_yvel);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;a := Sqrt(a1 + a2);</div><div class="code_line">&nbsp;if power = 0 then</div><div class="code_line">&nbsp;&nbsp;power := 2</div><div class="code_line">&nbsp;else</div><div class="code_line">&nbsp;&nbsp;power := Math.Min(2,power);</div><div class="code_line">&nbsp;//if a &#60; _maxvel then</div><div class="code_line">// &nbsp;fireEngine(power, offset);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;setSpeed(_maxvel);</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.backup(power:Integer);</div><div class="code_line">var a,a1,a2:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a1 := Math.Floor(_xvel * _xvel);</div><div class="code_line">&nbsp;&nbsp;a2 := Math.Floor(_yvel * _yvel);</div><div class="code_line">&nbsp;&nbsp;a := Sqrt(a1 + a2);</div><div class="code_line">&nbsp;&nbsp;setSpeed(0 - _maxvel);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.accelerate();</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;_xvel:=_xvel+_xaccel;</div><div class="code_line">&nbsp;&nbsp;_yvel:=_yvel+_yaccel;</div><div class="code_line">&nbsp;&nbsp;_accelerating:=False;</div><div class="code_line">&nbsp;&nbsp;_xaccel:=0;</div><div class="code_line">&nbsp;&nbsp;_yaccel:=0;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.animate();</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; if (Abs(_xvel) &#62;= 0.3) or (Abs(_yvel) &#62;= 0.3) or _accelerating or _colliding then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; _nextx := x1 + _xvel + _xaccel;</div><div class="code_line">&nbsp;&nbsp; &nbsp; _nexty := y1 + _yvel + _yaccel;</div><div class="code_line">&nbsp;&nbsp; &nbsp; if _colliding then</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;_colliding := false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_yaccel := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;_xaccel := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; end</div><div class="code_line">&nbsp;&nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; accelerate();</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_prevx := x1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;_prevy := y1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;x1 := x1 + Math.min(Math.Floor(_maxvel), Math.max(Math.Floor(0 - _maxvel), Math.Floor(_xvel)));</div><div class="code_line">&nbsp;&nbsp; &nbsp;y1 := y1 + Math.min(Math.Floor(_maxvel), Math.max(Math.Floor(0 - _maxvel), Math.Floor(_yvel)));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.Draw();</div><div class="code_line">var HDC2:THandle; M:TXFORM;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; mtx.identity();</div><div class="code_line">&nbsp;&nbsp; mtx.appendTransform(x1, y1, 1, 1, rotate1, 0, 0, 16, 29.5);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; hDc2 := Cs.Handle;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; SetGraphicsMode(hDc2, GM_ADVANCED);</div><div class="code_line">&nbsp;&nbsp; SaveDC(hDc2);</div><div class="code_line">&nbsp;&nbsp; fillChar(M, sizeOf(M), 0);</div><div class="code_line">&nbsp;&nbsp; M.eM11 := mtx.a;</div><div class="code_line">&nbsp;&nbsp; M.eM12 := mtx.b;</div><div class="code_line">&nbsp;&nbsp; M.eM21 := mtx.c;</div><div class="code_line">&nbsp;&nbsp; M.eM22 := mtx.d;</div><div class="code_line">&nbsp;&nbsp; M.eDx := mtx.tx;</div><div class="code_line">&nbsp;&nbsp; M.eDy := mtx.ty;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; ModifyWorldTransform(hDc2, M, MWT_LEFTMULTIPLY);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Cs.Draw(0,0,bitmap0);</div><div class="code_line">&nbsp;&nbsp;RestoreDC(HDC2,1);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.applyForce(angle, power:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.identity():TMatrix1;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a := 1;</div><div class="code_line">&nbsp;&nbsp;d := 1;</div><div class="code_line">&nbsp;&nbsp;b := 0;</div><div class="code_line">&nbsp;&nbsp;c := 0;</div><div class="code_line">&nbsp;&nbsp;tx := 0;</div><div class="code_line">&nbsp;&nbsp;ty := 0;</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.appendTransform(x, y, scaleX, scaleY:Real; rotation:Integer; skewX, skewY, regX, regY:Real):TMatrix1;</div><div class="code_line">var r, cos1, sin1:Real; a1:Integer;</div><div class="code_line">begin</div><div class="code_line">a1:=rotation mod 360;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if a1 &#60; 360 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; r := rotation*PI/180;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; cos1 := cos(r);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; sin1 := sin(r);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cos1 := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;sin1 := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; append(cos1*scaleX, sin1*scaleX, -sin1*scaleY, cos1*scaleY, x, y);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; tx := tx - (regX*a+regY*c);</div><div class="code_line">&nbsp;&nbsp; ty := ty - (regX*b+regY*d);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.append(a2, b2, c2, d2, tx2, ty2:Real):TMatrix1;</div><div class="code_line">var a1,b1,c1,d1:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a1:=a;</div><div class="code_line">&nbsp;&nbsp;b1:=b;</div><div class="code_line">&nbsp;&nbsp;c1:=c;</div><div class="code_line">&nbsp;&nbsp;d1:=d;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (a2 &#60;&#62; 1) or (b2 &#60;&#62; 0) or (c2 &#60;&#62; 0) or (d2 &#60;&#62; 1) then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; a &nbsp;:= a1*a2+c1*b2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; b &nbsp;:= b1*a2+d1*b2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; c &nbsp;:= a1*c2+c1*d2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; d &nbsp;:= b1*c2+d1*d2;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;tx:=a1*tx2+c1*ty2+tx;</div><div class="code_line">&nbsp;&nbsp;ty:=b1*tx2+d1*ty2+ty;</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.setSpeed(speed:Real);</div><div class="code_line">var a:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a := 0.0174532925199 * rotate1;</div><div class="code_line">&nbsp;&nbsp;speed := Math.min(_maxvel, Math.max(speed, 0 - _maxvel));</div><div class="code_line">&nbsp;&nbsp;_xvel := Cos(a) * speed;</div><div class="code_line">&nbsp;&nbsp; &nbsp;_yvel := Sin(a) * speed;</div><div class="code_line">&nbsp;&nbsp;_accelerating := true;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;bmp1 := TBitmap.Create;</div><div class="code_line">&nbsp;&nbsp;bmp1.LoadFromFile(&#39;.\WeaponQuadSkin.bmp&#39;); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;mtx:=TMatrix1.Create(bmp1,Image1.Canvas,Form1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,false,false,225,275);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Timer1.Enabled:=True;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;</div><div class="code_line">&nbsp;&nbsp;var Handled: Boolean);</div><div class="code_line">var P : TPoint;</div><div class="code_line">begin</div><div class="code_line">if Msg.message = WM_MOUSEMOVE then</div><div class="code_line">begin</div><div class="code_line">&nbsp;P:=Image1.ScreenToClient(Mouse.CursorPos);</div><div class="code_line">&nbsp;pt.mouseX := P.X;</div><div class="code_line">&nbsp;pt.mouseY := P.Y;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">var dx1, dy1, _rotateTo:Real;</div><div class="code_line">power:Integer;</div><div class="code_line">_trueRotation:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if rightb = true then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if leftb = true then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if upb = true then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;mtx.backup(power);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if downb = true then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;mtx.proceed(power);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;dx1 := mtx.x1 - pt.mouseX;</div><div class="code_line">&nbsp;&nbsp;dy1 := mtx.y1 - pt.mouseY;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;_rotateTo := getDegrees(getRadians(dx1, dy1));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Form1.Image1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">&nbsp;&nbsp;Form1.Image1.Canvas.FillRect(Form1.Image1.ClientRect);</div><div class="code_line">&nbsp;&nbsp; if rotate1 &#62; 180 then rotate1 := -180;</div><div class="code_line">&nbsp;&nbsp; if rotate1 &#60; -180 then rotate1 := 180;</div><div class="code_line">&nbsp;&nbsp;if _rotateTo &#62; rotate1 + 180 then _rotateTo := _rotateTo - 360;</div><div class="code_line">&nbsp;&nbsp;if _rotateTo &#60; rotate1 - 180 then _rotateTo := _rotateTo + 360;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; _trueRotation := (_rotateTo - rotate1);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; rotate1:=Trunc(rotate1+_trueRotation);</div><div class="code_line">&nbsp;&nbsp;// Label2.Caption:=FloatToStr(rotate1);</div><div class="code_line">&nbsp;&nbsp; mtx.animate;</div><div class="code_line">&nbsp;&nbsp; mtx.Draw();</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">//case Key of</div><div class="code_line">//vk_RIGHT: rightb := false;</div><div class="code_line">//vk_LEFT: leftb := false;</div><div class="code_line">//vk_UP: upb := false;</div><div class="code_line">//vk_DOWN: downb := false;</div><div class="code_line">//end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState);</div><div class="code_line">begin</div><div class="code_line">case key of vk_RIGHT: rightb := true;</div><div class="code_line">vk_LEFT: leftb := true;</div><div class="code_line">vk_UP:</div><div class="code_line">begin</div><div class="code_line">upb := true;</div><div class="code_line">downb := false;</div><div class="code_line">end;</div><div class="code_line">vk_DOWN:</div><div class="code_line">begin</div><div class="code_line">upb := false;</div><div class="code_line">downb := true;</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	