迴圈移動背景類

2021-06-22 18:26:31 字數 2228 閱讀 4871

/// /// 背景類

///

tgamecycleback = class(tlsgameanimatesprite)

private

fspeed, fpartx: tlsint;

ftick: cardinal;

protected

procedure dodraw; override;

procedure doprocess(const movecount: tlssingle); override;

public

constructor create(const aparent: tlsgamesprite); override;

/// /// 捲動速度

///

property speed: tlsint read fspeed write fspeed;

end;

在宣告中 宣告了 

fspeed 迴圈背景的移動速度 

fpartx   doprocess中的移動距離

ftick     時間節點

procedure tgamecycleback.dodraw;

/// /// 四捨五入

///

function gameround(afloat: single): tlsint;

begin

if afloat - trunc(afloat) >= 0.5 then

result := trunc(afloat) + 1

else

result := trunc(afloat);

end;

var bk: tlsgametexture;

tick: cardinal;

actualx: tlsint;

begin

tick := (gametimer.getticks - ftick); //移動一次的時間間隔

actualx := fpartx + gameround(fspeed * integer(tick) / (1000 div gametimer.fps)); //渲染時實際走的距離

if actualx >= gamedevice.windowsize.x then

actualx := actualx - gamedevice.windowsize.x;

bk := gameimages.items[self.patternindex];

if actualx > 0 then

begin

bk.boundsrect := lsrect(gamedevice.windowsize.x - actualx, 0, actualx, gamedevice.windowsize.y);

gamecanvas.usetexture(bk);

gamecanvas.draw2d(lspoint(self.x, self.y));

end;

bk.boundsrect := lsrect(0, 0, gamedevice.windowsize.x - actualx, gamedevice.windowsize.y);

gamecanvas.usetexture(bk);

gamecanvas.draw2d(lspoint(actualx, self.y));

end;

這裡面涉及到dodraw和doprocess的問題

因為dodraw和doprocess 的不同步所以 當dodraw花費的時間長時。導致邏輯運算比繪畫要多走, 這樣就會出現畫面卡。 為了讓畫面平滑滾動,在dodraw中做時時的移動渲染, actualx 就是在時間渲染時真正走的距離。在每走一次dodraw就計算一次,並繪畫一次,比在doprocess中處理移動在dodraw處理渲染要顯的更加平滑。

procedure tgamecycleback.doprocess(const movecount: tlssingle);

begin

inherited;

fpartx := fpartx + fspeed;

if fpartx >= gamedevice.windowsize.x then

dec(fpartx, gamedevice.windowsize.x);

ftick := gametimer.getticks;

end;

unity shader 實現迴圈移動背景

需要前置條件有以下幾點 1 需要一張能夠無縫連線並迴圈的 不連續 會在交接的地方 出現一條縫隙 2 將的 wrapmode格式改為 repeat 3 具體sader 如下 的wrapmode需要設定為repeat shader custom circulationbg scrollxspeed x ...

背景移動視差效果

我們在遊戲中有時會遇到 兩層背景的情況,要離我們遠的背景移動比較慢,近的比較快,如果不想自己寫寫兩層背景,我們可以利用引擎自帶的視差節點來做 auto sprite3 sprite create helloworld.png sprite3 setanchorpoint point 0,0 auto...

移動端背景縮放

background size 500px 200px 2 只寫乙個引數時為寬度,高度省略會等比例縮放 background size 500px 3 單位可以跟百分百 相對于父盒子來說的 background size 50 4 cover屬性 要完全覆蓋div盒子,等比例拉伸,可能有部分顯示不全...