Page 1 of 1

sB зависает при включении программы

Posted: Mon Dec 21, 2015 6:36 am
by Tantrixx
Уважаемый mr.K, форумчане. Помогите с проблемой. sB зависает без ошибки. Помогает только выгрузка из памяти и включение. Не могу найти код, из-за которого это происходит. При том он может 10 раз включить программу, а на 11-й раз зависнуть, а может подряд несколько раз виснуть. Ниже ссылка в Дропбокс и сам код программы. А я буду продолжать искать, что заставляет виснуть Бейсик. Спасибо.
https://www.dropbox.com/sh/ctnsz8712p7y ... 1xAca?dl=0

Code: Select all

GRAPHICS
GRAPHICS CLEAR 1,1,1
OPTION ANGLE DEGREES
OPTION SPRITE POS CENTRAL
OPTION IMAGE POS CENTRAL
OPTION TEXT POS CENTRAL
SET ORIENTATION LANDSCAPE
SET TOOLBAR OFF
maxx=SCREEN_WIDTH()
maxy=SCREEN_HEIGHT()
DRAW ALPHA 0.8
DRAW IMAGE "System/grass.png" AT maxx/2,maxy/2 SCALE 1.5

d$="das"
BUTTON d$ TEXT "выход" AT 3/2*(maxx/23),(maxy-2*(maxx/23)) SIZE (maxx/23)*3,(maxx/23)*2

'данные игры
s=0.19
lv$="perch"
pnx=350 ! pnx= 220
pvx=350 ! pvy=122
lnx=103 ! lny=179
lvx=103 ! lvy=118 ! se=0.03
x=.2 ! y=.12
b=0 ! n=1.5
sch$=0 ! sche$=" Счет: "
' размер экрана 568,320




SPRITE "hen_pv" LOAD "System/hen3.png"
SPRITE "hen_pv" AT 500,92 SCALE s
SPRITE "hen_pv" COPY "hen_lv"
SPRITE "hen_lv" AT 70,92 SCALE s FLIP 1
SPRITE "hen_pv" COPY "hen_ln"
SPRITE "hen_ln" AT 70,152 SCALE s FLIP 1
SPRITE "hen_pv" COPY "hen_pn"
SPRITE "hen_pn" AT 500,152 SCALE s 

SPRITE "hen_pv" SHOW
SPRITE "hen_lv" SHOW
SPRITE "hen_ln" SHOW
SPRITE "hen_pn" SHOW

'рисование насеста

DRAW COLOR 0,0,0
SPRITE lv$ BEGIN 50,10
DRAW SIZE 10
DRAW LINE 0,0 TO 45,0
SPRITE END
SPRITE lv$ AT 70,125
SPRITE lv$ COPY "perch_pv"
SPRITE "perch_pv" AT 505,125
SPRITE lv$ COPY "perch_pn"
SPRITE "perch_pn" AT 505,185
SPRITE lv$ COPY "perch_ln"
SPRITE "perch_ln" AT 70,185
SPRITE lv$ COPY "perch_lvu"
SPRITE "perch_lvu" RESIZE 100,10
SPRITE "perch_lvu" AT 130,149 ANGLE 30
SPRITE "perch_lvu" COPY "perch_lnu"
SPRITE "perch_lnu" AT 130,209 ANGLE 30
SPRITE "perch_lvu" COPY "perch_pvu"
SPRITE "perch_pvu" AT 449,144 ANGLE -30
SPRITE "perch_lvu" COPY "perch_pnu"
SPRITE "perch_pnu" AT 449,204 ANGLE -30

SPRITE "perch_pnu" SHOW
SPRITE "perch_pvu" SHOW
SPRITE "perch_lnu" SHOW
SPRITE "perch_lvu" SHOW
SPRITE "perch_ln" SHOW
SPRITE "perch_pn" SHOW
SPRITE "perch_pv" SHOW
SPRITE lv$ SHOW

SPRITE "b_egg" LOAD "System/broken egg.png"
SPRITE "b_egg" AT 175,280 SCALE se
SPRITE "b_egg" SHOW
SPRITE "b_egg" ALPHA 0

SPRITE "b_egg" COPY "dead_lives"
SPRITE "dead_lives" AT 350,60 SCALE se
SPRITE "dead_lives" SHOW
SPRITE "dead_lives" ALPHA 1
SPRITE "dead_lives" HIDE

SPRITE "masha_up_pv" LOAD "System/Masha up.png"
SPRITE "masha_up_pv" AT 345,220 SCALE 0.15 FLIP 1
SPRITE "masha_up_pv" SHOW
SPRITE "masha_up_pv" COPY "masha_up_lv"
SPRITE "masha_up_lv" AT 230,220 SCALE .15

SPRITE "masha_ln" LOAD "System/Masha.png"
SPRITE "masha_ln" AT 230,205 SCALE 0.09 ANGLE 10
SPRITE "masha_ln" COPY "masha_pn"
SPRITE "masha_pn" AT 345,205 SCALE .09 ANGLE 10 FLIP 1

SPRITE "masha_pn" SHOW
SPRITE "masha_pn" HIDE
SPRITE "masha_ln" SHOW
SPRITE "masha_ln" HIDE
SPRITE "masha_up_lv" SHOW
SPRITE "masha_up_lv" HIDE

SPRITE "egg" LOAD "System/egg2.png"
SPRITE "egg" AT lvx,lvy SCALE se
SPRITE "egg" DELAY 0.01
SPRITE "egg" SHOW
SPRITE "egg" LOOP

SPRITE "egg" COPY "egg1"

SPRITE "egg1" AT lnx,lny SCALE se
SPRITE "egg1" DELAY .01
SPRITE "egg1" SHOW

SPRITE "egg1" HIDE


LOOP:

SPRITE "egg" DA 5 DX x DY y

GET SPRITE "egg" POS x1,y1

IF x1 >= 175 OR x2 >=175 THEN 
x=0 ! y=1.5 ! xe1=0 ! ye1=0
ENDIF

DRAW TEXT sche$ AT 350,30
FIELD "schet" BACK ALPHA 0
FIELD "schet" TEXT sch AT 380,14

IF SPRITES_COLLIDE ("egg","b_egg")=1 THEN 
SPRITE "egg" HIDE
SPRITE "egg" STOP
SPRITE "b_egg" ALPHA 1
SPRITE "dead_lives" SHOW
ENDIF

GET TOUCH 0 AS h,w
IF SPRITE_HIT ("hen_lv",h,w)=1 THEN

SPRITE "masha_up_pv" HIDE
SPRITE "masha_pn" HIDE
SPRITE "masha_ln" HIDE
SPRITE "masha_up_lv" SHOW
ENDIF

IF SPRITE_HIT ("hen_pv",h,w)=1 THEN

SPRITE "masha_up_lv" HIDE
SPRITE "masha_pn" HIDE
SPRITE "masha_ln" HIDE
SPRITE "masha_up_pv" SHOW
ENDIF

IF SPRITE_HIT ("hen_ln",h,w)=1 THEN

SPRITE "masha_up_pv" HIDE
SPRITE "masha_pn" HIDE
SPRITE "masha_up_lv" HIDE
SPRITE "masha_ln" SHOW
ENDIF

IF SPRITE_HIT ("hen_pn",h,w)=1 THEN

SPRITE "masha_up_pv" HIDE
SPRITE "masha_ln" HIDE
SPRITE "masha_up_lv" HIDE
SPRITE "masha_pn" SHOW
ENDIF

IF SPRITES_COLLIDE ("egg","masha_up_lv")=1 THEN
SPRITE "egg" END
SPRITE "egg" HIDE
SPRITE "egg1" LOOP
SPRITE "egg1" SHOW
sch=sch+1
ENDIF

IF SPRITES_COLLIDE ("egg1","masha_ln")=1 THEN
SPRITE "egg1" HIDE
SPRITE "egg1" STOP
sch=sch+1
ENDIF

xe1=.2 ! ye1=.12


GET SPRITE "egg1" POS x2,y2

SPRITE "egg1" DA 5 DX xe1 DY ye1


IF SPRITES_COLLIDE ("egg1","b_egg")=1 THEN 
SPRITE "egg1" STOP
SPRITE "egg1" HIDE
SPRITE "b_egg" ALPHA 1
SPRITE "dead_lives" SHOW
ENDIF




IF  BUTTON_PRESSED (d$)  THEN
SET TOOLBAR ON
ENDIF

GOTO LOOP

Re: sB зависает при включении программы

Posted: Mon Dec 21, 2015 7:06 am
by Фант
Все дело в спрайтах...
Они у Вас не оптимизированы.
1.Изображения огромны! К примеру картинка с машей-2000 точек на 2000! Вы его создаете таким размером тратите огромное количество оперативной памяти, затем меньшаете его в 7 :!: раз... Это тоже оперативная память!
Совет: если Вы не можете уменьшить размеры картинки за пределами sB, то надо поступать следующим образом: спрайт создаете нужного размера а туда уже вставляете уменьшенного размера изображение, к примеру:
Get Image 1 size w,h
Sprite begin w/7,h/7
Draw image "m" at w/7/2,h/7/2 scale 1/7
Sprite end
...
2.что у вас в цикле делает команда sprite "egg" end?

Re: sB зависает при включении программы

Posted: Mon Dec 21, 2015 7:27 am
by Tantrixx
Спасибо, учту. Sprite "egg" end нужно удалить :) я разные способы удаления, остановки и прятанья спрайтов пробовал. Видимо не до конца почистил.

Re: sB зависает при включении программы

Posted: Mon Dec 21, 2015 7:29 am
by Tantrixx
А как в самой программе смотреть, как и сколько оперативки кушает программа? Я сторонней программой уменьшу все картинки, и подредактирую в Бейсике потом :)

Re: sB зависает при включении программы

Posted: Mon Dec 21, 2015 7:33 am
by Tantrixx
Мне эти яйца с Машей сняться :) А жена возмущается, что сижу и пялюсь в телефон целыми днями на "свои яйца" :)

Re: sB зависает при включении программы

Posted: Mon Dec 21, 2015 7:36 am
by Mr. Kibernetik
Тема перенесена из сообщений об ошибках в другие темы.

Re: sB зависает при включении программы

Posted: Mon Dec 21, 2015 7:50 am
by Фант
Tantrixx wrote:А как в самой программе смотреть, как и сколько оперативки кушает программа? Я сторонней программой уменьшу все картинки, и подредактирую в Бейсике потом :)
Никак.
Почитайте историю форума в других темах. Mr.kibernetik гдето писал как можно посчитать задействование оперативной памяти в зависимости от размера спрайта.
Еще раз повтарюсь-со спрайтами нужно быть очень аккуратным.если Вы создали спрайт, томало того что Вы задействовали оперативку на его создание, но еще он забрал на себя часть оперативной памяти и будет ее держать пока Вы его не удалите...но удалять тоже надо грамотно, потому что если надо будет заново создавать его то память опять будет задействована, так как на создание спрайта уходит ее много.
Ну а если у Вас оперативная память вся забита, то девайс в лучшем случае зависает, а в худшем-программа вылетает...
Както так