forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   Вопрос-Ответ (для новичков BlitzMax) (http://forum.boolean.name/showthread.php?t=13756)

yorri 23.03.2013 14:47

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Вопрос.
Есть тайловое игровое поле - большое (1000х1000), когда я двигаюсь и его перерисовываю части изображения начинают как бы "дребезжать и смазываться"...
1. Можно ли как то это устранить, может синхронизацией какой то?
2. Может лучше давать перерисовывать только видимые тайлы , а не все поле?
Спасибо.

Nikich 23.03.2013 17:42

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Рисовать обязательно надо только видимые тайлы. Во-первых, какой смысл рисовать то, что мы не видим? Во-вторых, мало того, что это бесполезно, мы ещё и производительность теряем.
Измени Flip, на Flip(1), должно помочь.

yorri 23.03.2013 18:41

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо, попробую.

yorri 03.04.2013 15:43

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Еще раз спасибо, все сделал, все получилось.

Тут возник такой вопрос.
Есть главный файл
В нем
Код:

...
Include "Bullet.bmx"
Import "Collisions.bmx"
...

Global BulletList:TList = CreateList()

...
в главном цикле
...
CollisionsCheck()
...

Хочу сделать в отдельном файле Collisions.bmx всякую проверку столкновений, но не могу "добраться" ...

Код:

Function CollisionsCheck()

For Local Bullet:TBullet = EachIn BulletList
       
  If Bullet.BulletCollided = 1 Then DrawText "Collide" + BulletX, 10, 30

Next
EndFunction

Выдает ошибку "Compile Error: Identifier 'TBullet' not found"

Параметр BulletCollided описан в Bullet.bmx

Спасибо.

Nex 03.04.2013 16:08

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Поидее должно работать но к чему тут Import?
Код:

Include "Bullet.bmx"
Import "Collisions.bmx"


SBJoker 03.04.2013 17:06

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Емнип Import в BlitzMAX это как Include_once, добавляет только если ещё не было добавлено ранее.

yorri 03.04.2013 18:27

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Спасибо, заработало. Поменял Import на Include.
/не опытен я еще :-)/

yorri 04.04.2013 17:42

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Вопрос.
А можно ли как-то узнать координаты точки в которой произошла коллизия? Я имею ввиду не координаты двух обьектов (это мы знаем), а именно координати пикселя где они с толкнулись.
Спасибо.

yorri 04.04.2013 23:27

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Еще вопрос.:)

Проверяю столкновение.
Вот такой вариант работает
Код:

Local p:Object[] = CollideImage(BulletImage, BulletX, BulletY, 0, 1, 0)
For Local i:Int = 1 To p.Length
DrawText "Collide" + (TTile(p[i - 1] ).MapX), 10, 250
Next

А такой нет
Код:

Local p:Object = CollideImage(BulletImage, BulletX, BulletY, 0, 1, 0)
If p <> Null Then
Local i:Int = TTile(p).MapX
DrawText "Collide " + BulletX, 10, 250
EndIf

Как бы одно и тоже, но во втором варианте выдает ошибку, типа ссылка на Null объект... хотя отладчик показывает, что переменная р не пустая...

Platon 05.04.2013 14:03

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
в первом случае кастуешь указатель на объект к тайлу
во втором случае кастуешь указатель на коллекцию обьектов, что неверно, преобразовать тип не удалось, в результате указатель на TTile становится null

и еще
Цитата:

For Local i:Int = 1 To p.Length
...[i - 1]...
Юзай Until:
Цитата:

For Local i:Int = 0 Until p.Length
...[i]...

yorri 06.04.2013 12:00

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Platon (Сообщение 256349)
в первом случае кастуешь указатель на объект к тайлу
во втором случае кастуешь указатель на коллекцию обьектов, что неверно, преобразовать тип не удалось, в результате указатель на TTile становится null...

Спасибо. Кажись понял.

Nikich 07.04.2013 01:23

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Не подскажите, как можно свернуть окно приложения так, чтобы оно не отображалось на панели задач? Желательно также, чтобы в трее тоже не было видно.

Reizel 09.04.2013 01:46

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Nikich (Сообщение 256441)
Не подскажите, как можно свернуть окно приложения так, чтобы оно не отображалось на панели задач? Желательно также, чтобы в трее тоже не было видно.

WinAPI. онли

yorri 14.04.2013 17:17

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Назрели два вопроса. Буду признателен за помощь.
Первый.
Каким образом можно узнать/отсчитывать отрезки времени. Например мне нужно выполнять некоторое действие скажем каждые 10, 15, 30 сек?...

Второй.
Есть тайл-изображение (32х32, png), есть другой тайл (32х32, png). Нужно обьеденить эти изображения (скажем методом "И"), то есть поверх первого нарисовать другое, и что бы результат действий записался вместо первого изображения. Можно как то это сделать?, а то сейчас просто рисую второе поверх первого, что не есть хорошо.
Спасибо.

Nikich 14.04.2013 17:55

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Код:

Global time=MilliSecs(), interval = 500
...

if MilliSecs()-time>interval
...
time=MilliSecs()
endif

Мне кажется, попиксельно изменять картинку будет медленнее, чем нарисовать 2 картинки.


Часовой пояс GMT +4, время: 11:18.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot